gpt4 book ai didi

Django Rest Framework 不会反序列化作为原始 JSON 传递的数据

转载 作者:行者123 更新时间:2023-12-02 07:16:39 25 4
gpt4 key购买 nike

我有以下观点:

class Authenticate(generics.CreateAPIView):
serializer_class = AuthSerializer

def create(self, request):
serializer = AuthSerializer(request.POST)
# Do work here

如果数据作为表单传递,则效果很好,但是,如果数据作为原始 JSON 传递,则序列化程序将被实例化,并将其所有字段设置为 None。该文档确实提到应该有任何特定于处理原始 JSON 参数的内容。

如有任何帮助,我们将不胜感激。

更新

为了使 Browsable API 在传递原始 JSON 时按预期工作,我采取了以下解决办法,但我相信一定有更好的方法。

def parse_data(request):
# If this key exists, it means that a raw JSON was passed via the Browsable API
if '_content' in request.POST:
stream = StringIO(request.POST['_content'])
return JSONParser().parse(stream)
return request.POST


class Authenticate(generics.CreateAPIView):
serializer_class = AuthSerializer

def create(self, request):
serializer = AuthSerializer(parse_data(request))
# Do work here

最佳答案

您访问请求数据的方式错误 - request.POST 仅处理解析表单多部分数据。

改用 REST 框架的 request.data。这将处理表单数据、json 数据或您配置的任何其他解析器。

关于Django Rest Framework 不会反序列化作为原始 JSON 传递的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17842859/

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