【问题标题】:Module 'rest_framework.request' has no attribute 'method' Django error模块“rest_framework.request”没有属性“方法”Django 错误
【发布时间】:2021-07-16 17:41:13
【问题描述】:

我遇到了一个奇怪的错误,我没有找到答案,这意味着我需要你的帮助(再次)。

所以,我的views.py 文件中有两个视图,我正在尝试为一个视图添加GET 和POST 方法,我尝试使用请求检查该方法。方法但休息框架工作模块告诉我没有那个属性,请你帮我解决这个问题吗? 谢谢!

在 models.py 我有:

class ChatViewSet(ConversationViewSet):

    @api_view(['GET', 'POST'])
    def get_chat(self, **kwargs):

        if request.method == 'GET':
            information = Chat.objects.all()
            tutorials_serializer = ChatSerializer(information, many=True).data
            return JsonResponse(tutorials_serializer, safe=False)
        elif request.method == 'POST':
            tutorial_data = JSONParser().parse(request)
            tutorial_serializer = ChatSerializer(data=tutorial_data)
            tutorial_data['status'] = 'new'
            tutorial_data['chat_id'] += 1
            if tutorial_serializer.is_valid():
                tutorial_serializer.save()
                return JsonResponse(tutorial_serializer.data,
                                    status=status.HTTP_201_CREATED)
            return JsonResponse(tutorial_serializer.errors,
                            status=status.HTTP_400_BAD_REQUEST)

在 urls.py 中:

urlpatterns = [

    url(r'^conversation/', ConversationViewSet.get_all),
    url(r'^conversation/(?P<pk>[0-9]+)$', ConversationViewSet.get_by_id),
    url(r'chat', ChatViewSet.get_chat),
]

还有错误:

if request.method == 'GET':
AttributeError: module 'rest_framework.request' has no attribute 'method'

【问题讨论】:

    标签: python django django-rest-framework python-requests


    【解决方案1】:

    你的函数在一个 class 里面,我假设它的名字是一个ViewSet,这意味着你真的不需要那个api_view 装饰器。 api_view 装饰器用于从功能视图而不是基于类的视图创建 api 视图。而对于视图集,您希望使用 action decorator 来标记路由的额外操作:

    from rest_framework.decorators import action
    
    
    class ChatViewSet(ConversationViewSet):
    
        @action(detail=True, methods=['get', 'post'])
        def get_chat(self, **kwargs):
            ...
    

    【讨论】:

      【解决方案2】:

      get_chat 中添加staticmethod 装饰器和request

      @api_view(['GET', 'POST'])
      @staticmethod
      def get_chat(request, **kwargs):
      

      【讨论】:

      • 好吧,我已经尝试通过收到外部范围错误来做到这一点,idk。
      • 刚刚注意到,为什么ChatViewSet里面有这个视图?我更新了我的答案。可以试试吗?
      • Ofc,我知道为什么我把那个方法放在课堂上,谢谢!
      猜你喜欢
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 2021-07-17
      • 2021-09-25
      相关资源
      最近更新 更多