gpt4 book ai didi

python - Django REST Framework 中的驼峰式 POST 数据

转载 作者:太空狗 更新时间:2023-10-30 01:21:20 25 4
gpt4 key购买 nike

我看到有一个名为 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com