【问题标题】:How can I limit http method to a Django REST api如何将 http 方法限制为 Django REST api
【发布时间】:2017-07-04 12:30:46
【问题描述】:

如何将基于函数的视图中的 api_view 装饰器更改为基于类的视图?我的要求是,我想将 GET、POST、PUT 等 HTTP 访问方法限制为特定的 API

@api_view(['GET', 'POST'])
def hello_world(request):
    if request.method == 'POST':
        return Response({"message": "Got some data!", "data": request.data})
    return Response({"message": "Hello, world!"})

希望有人知道答案.....

【问题讨论】:

    标签: python django django-models django-rest-framework django-class-based-views


    【解决方案1】:

    您可以使用http_method_names 如下,希望您使用ModelViewSet 类。

    class UserView(viewsets.ModelViewSet):
        queryset = UserModel.objects.all()
        serializer_class = UserSerializer
        http_method_names = ['get']
    

    【讨论】:

      【解决方案2】:

      您还可以使用基于通用类的视图。它们只提供适当的 http 方法处理程序,例如 generics.RetrieveAPIView 只允许 GET 请求。 documentation at 列出了通用视图及其支持的方法。

      【讨论】:

        【解决方案3】:

        您应该使用 APIView。只有你在类中定义的方法是允许的。在这个方法中,只有 get 和 post 是允许的。

        from rest_framework.views import APIView
        
        class SnippetList(APIView):
        """
        List all snippets, or create a new snippet.
        """
        def get(self, request, format=None):
            snippets = Snippet.objects.all()
            serializer = SnippetSerializer(snippets, many=True)
            return Response(serializer.data)
        
        def post(self, request, format=None):
            serializer = SnippetSerializer(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)
        

        【讨论】:

          猜你喜欢
          • 2021-01-02
          • 1970-01-01
          • 2012-03-21
          • 2015-10-09
          • 2017-12-25
          • 2019-12-28
          • 1970-01-01
          • 2020-09-25
          • 2019-06-22
          相关资源
          最近更新 更多