- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我看到有一个名为 djangorestframework-camel-case 的项目,它允许在 Django REST 序列化程序中使用带有 underscore_cased 字段的 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
解析器根本没有被使用。
因为序列化器是这样使用的:
Serializer(data=request.data)
我正在考虑子类化 Serializer 并在进一步处理之前修改 data
,或者甚至在创建 Serializer 之前修改它。但我要求的是一种更方便的方法,适用于所有序列化程序,而无需对它们进行子类化。
最佳答案
为什么不坚持使用解析器?
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)
简单、有效且放置得当...
关于python - Django REST Framework 中的驼峰式 POST 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32116972/
如 this question适用于“大型”Visual Studio 和 Resharper,我也希望在 VS Code 中看到该功能。 滚动浏览 shortcut list对于 VS Code,我
我是一名优秀的程序员,十分优秀!