2

beschränken Wie kann ich die api_view Dekorator in der funktionsbasierten Ansicht zur klassenbasierten Ansicht ändern? Meine Forderung ist, möchte ich die HTTP-Zugriffsmethoden wie GET, POST begrenzen, PUT usw. auf eine bestimmte APIWie kann ich http Methode auf eine 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!"}) 

Hoffnung jemand kennen die Antwort .....

Antwort

3

Sie können http_method_names wie unten verwenden und hoffe, Sie verwenden ModelViewSet Klasse.

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

Sie APIView verwenden sollten. Methoden, die nur Sie in der Klasse definieren, sind zulässig. In diesem sind nur get und post zulässig.

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) 
0

Sie können auch die generischen klassenbasierten Ansichten verwenden. Sie stellen nur die entsprechenden HTTP-Methodenhandler zur Verfügung, z. B. generics.RetrieveAPIView. Nur GET-Anforderung zulässig. Die documentation at listet die generischen Ansichten auf und welche Methoden sie unterstützen.

Verwandte Themen