m4t*_*4tx 5 python django rest camelcasing django-rest-framework
我看到有一个名为djangorestframework-camel-case的项目,允许在Django REST序列化程序中使用带有下划线字段的JavaScript-ish camelCase.所以,基本上,我可以发送:
{
"camelCase": "foo"
}
Run Code Online (Sandbox Code Playgroud)
并使用以下Serializer接收它:
class MySerializer(serializers.Serializer):
session_id = serializers.CharField()
Run Code Online (Sandbox Code Playgroud)
是否存在类似POST数据的内容?所以我可以camelCase=foo通过POST 发送并将其接收到我的序列化器中的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")
...
Run Code Online (Sandbox Code Playgroud)
并且,在将其添加到DEFAULT_PARSER_CLASSESsettings.py中之后,initialized实际打印时,parse则不是.所以看来,在POST数据的情况下,application/x-www-form-urlencoded根本不使用解析器.
由于Serializers的使用方式如下:
Serializer(data=request.data)
Run Code Online (Sandbox Code Playgroud)
我正在考虑继承Serializer并data在进一步处理之前进行修改,甚至在创建Serializer之前修改它.但我要求的是一种更方便的方法,适用于所有的Serializers,而无需对它们进行子类化.
为什么不坚持使用解析器?
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)
Run Code Online (Sandbox Code Playgroud)
简单,工作和正确放置......
| 归档时间: |
|
| 查看次数: |
1740 次 |
| 最近记录: |