如何限制HTTP方法到Django REST api

问题描述:

我如何将基于功能的视图中的修饰器修改为基于类的视图中的api_view?我的要求是,我要限制HTTP访问方法,比如GET,POST,PUT等,以特定的API如何限制HTTP方法到Django REST 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!"}) 

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

您可以使用下面的http_method_names,并希望您使用ModelViewSet类。

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

您应该使用API​​View。只有你在课堂上定义的方法是允许的。在这个只允许和允许的地方。

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) 

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