【问题标题】:Django rest framework request.data raises ErrorDjango 休息框架 request.data 引发错误
【发布时间】:2017-05-15 05:26:09
【问题描述】:

我正在使用 Django Rest 框架。在我看来,都会引发像request instance has no attribute 'data' 这样的错误,我尝试了很多,但没有找到任何东西。我是否必须添加任何中间件或其他东西? DRF 如何从 request.POST 和 request.GET 中检索数据。我的观点是基于功能的。

def list(request, format=None):
    if request.method == 'POST':
        serializer = CustomerSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

【问题讨论】:

  • 你能告诉我们你的代码吗?
  • 你用的是什么方法? request 只有 POST、PUT 和 PATCH 方法的数据值。如果您在 GET 上尝试,则需要使用 request.query_params。
  • 这是直接的方法定义还是基于类的视图?它要么需要有@api_view 装饰器,要么是从viewsets.ModelViewSet 继承的类的一部分

标签: python django django-rest-framework


【解决方案1】:

@api_view 缺少装饰器。要在 DRF 中获取 request.data,您必须使用装饰器 @api_view 或从 APIView 类扩展 如果您使用的是基于类的视图。

从 rest_framework.decorators 导入 api_view

@api_view
def list(request):
    if request.method == 'POST':
        serializer = CustomerSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

对于基于类的视图从 APIView 扩展

from rest_framework.views import APIView

class List(APIView):

    def post(self, request):
        serializer = CustomerSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

文档:DRF request

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 2021-11-26
    • 1970-01-01
    • 2015-04-17
    相关资源
    最近更新 更多