2016-06-05 13 views
4

Ich habe folgende Funktionen in Rest API für Benutzermodell. Ich möchte die AllowAny-Berechtigung nur für POST-Anfragen festlegen. Kann mir jemand helfen?Wie füge ich Django Rest Framework-Berechtigungen nur für bestimmte Methoden hinzu?

class UserList(APIView): 
    """Get and post users data.""" 

    def get(self, request, format=None): 
     """Get users.""" 
     users = User.objects.all() 
     serialized_users = UserSerializer(users, many=True) 
     return Response(serialized_users.data) 

    def post(self, request, format=None): 
     """Post users.""" 
     serializer = UserSerializer(data=request.data) 
     if serializer.is_valid(): 
      serializer.save() 
     return Response(serializer.data, status=status.HTTP_201_CREATED) 
+0

Was passiert im Fall von 'GET' Anfragen? –

+1

@RahulGupta Im Falle einer "GET" Anfrage ist eine Authentifizierung erforderlich. – Ankit

Antwort

9

Sie können eine custom Permission classIsPostOrIsAuthenticated whi schreiben ch erlaubt uneingeschränkten Zugriff auf POST Anfragen, erlaubt aber nur authentifizierte Anfragen GET.

Um die benutzerdefinierte Berechtigung IsPostOrIsAuthenticated zu implementieren, überschreiben Sie die Klasse BasePermission und implementieren Sie die Methode .has_permission(self, request, view). Die Methode sollte True zurückgeben, wenn die Anforderung Zugriff gewährt werden sollte, und andernfalls False.

from rest_framework import permissions 

class IsPostOrIsAuthenticated(permissions.BasePermission):   

    def has_permission(self, request, view): 
     # allow all POST requests 
     if request.method == 'POST': 
      return True 

     # Otherwise, only allow authenticated requests 
     return request.user and request.user.is_authenticated() 

Also, alle POST Anfragen werden uneingeschränkten Zugang gewährt werden. Für andere Anfragen ist eine Authentifizierung erforderlich.

Jetzt müssen Sie diese benutzerdefinierte Berechtigungsklasse in Ihre globalen Einstellungen einschließen.

REST_FRAMEWORK = { 
    'DEFAULT_PERMISSION_CLASSES': (
     'my_app.permissions.IsPostOrIsAuthenticated', 
    ) 
} 
1

http://www.django-rest-framework.org/api-guide/permissions/

nach oben URL haben Sie eine benutzerdefinierte Berechtigungsklasse

class ExampleView(APIView): 
    permission_classes = (MyCUstomAuthenticated,) 

Schreiben Sie Ihre eigene Logik AllowAny oder IsAuthenticated innerhalb MyCUstomAuthenticated basierend auf POST zu schreiben und GET