Django REST Framework中的camelCase POST数据

时间:2015-08-20 11:25:22

标签: python django rest django-rest-framework camelcasing

我看到有一个名为djangorestframework-camel-case的项目,允许在Django REST序列化程序中使用带有下划线字段的JavaScript-ish camelCase。所以,基本上,我可以发送:

{
    "camelCase": "foo"
}

使用以下序列化程序接收它:

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

是否存在类似POST数据的内容?所以我可以通过POST发送camelCase=foo并将其接收到序列化程序中的underscore_case字段?

我尝试使用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")
        ...

并且,在settings.py中将其添加到DEFAULT_PARSER_CLASSES后,实际打印initialized时,parse则不然。所以看来,在POST数据的情况下,根本不使用application/x-www-form-urlencoded解析器。

由于使用了Serialifiers:

Serializer(data=request.data)

我正在考虑继承Serializer并在进一步处理之前修改data,甚至在创建Serializer之前修改它。但我要求的是一种更方便的方法,适用于所有序列化程序,而无需对它们进行子类化。

1 个答案:

答案 0 :(得分: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)

简单,正常工作......