如何将 http 方法限制为 Django REST api

How can I limit http method to a Django REST api

如何将基于函数的视图中的 api_view 装饰器更改为基于 Class 的视图?我的要求是,我想将 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!"})

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

您应该使用 APIView。只有您在 class 中定义的方法将是 permissible.In 这只会得到并且 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)

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

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

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