我有以下看法:
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