2015-08-20 2 views
5

Я вижу, что существует проект под названием djangorestframework-camel-case, который позволяет использовать JavaScript-ish camelCase с полями underscore_cased в сериализаторах Django REST. Так, в принципе, я могу отправить:данные CamelCase POST в Django REST Framework

{ 
    "camelCase": "foo" 
} 

И получить его с помощью следующей Serializer:

class MySerializer(serializers.Serializer): 
    session_id = serializers.CharField() 

Существует ли что-то подобное для данных POST? Итак, я могу отправить camelCase=foo через POST и получить его в поле подчёркивания в моем сериализаторе?

Я попытался реализации моего собственного парсера на основе FormParser:

class CamelCaseFormParser(FormParser): 
    media_type = 'application/x-www-form-urlencoded' 

    def __init__(self): 
     print("initialized") 

    def parse(self, stream, media_type=None, parser_context=None): 
     print("parse") 
     ... 

И, после добавления его в DEFAULT_PARSER_CLASSES в settings.py, в то время как на самом деле initialized распечатан, parse нет. Таким образом, кажется, что в случае POST-данных анализатор application/x-www-form-urlencoded не используется вообще.

Поскольку сериализаторы используются так:

Serializer(data=request.data) 

Я думал о подклассов Serializer и модификации data прежде чем он будет обработан в дальнейшем, или даже изменить его перед созданием Serializer. Но то, что я прошу, более удобный способ, работающий для всех Serializers, без их подклассификации.

ответ

3

Почему бы не придерживаться парсеров?

from djangorestframework_camel_case.util import underscoreize 
from rest_framework import parsers 
from django.conf import settings 
from django.http import QueryDict 


class CamelCaseFormParser(parsers.FormParser): 
    def parse(self, stream, media_type=None, parser_context=None): 
     parser_context = parser_context or {} 
     encoding = parser_context.get('encoding', settings.DEFAULT_CHARSET) 
     data = QueryDict(stream.read(), encoding=encoding) 
     return underscoreize(data) 

простой, работая и должным образом размещены ...

Смежные вопросы