2

Ich habe einige Benutzer in meiner Anwendung sagen A, B und C. Wenn jede Art von Benutzer authentifiziert ich nicht dieser Benutzer möchte alle SoIndividuelle Dekorateur für Klasse basierte Ansichten in django Rest Rahmen

meines API zugreifen für die Funktion basierte Ansichten implementiert ich ein Dekorateur:

from functools import wraps 

from rest_framework import status 
from rest_framework.response import Response 


def permit(user_type): 
    class Permission(object): 

     def __init__(self, view_func): 
      self.view_func = view_func 
      wraps(view_func)(self) 

     def __call__(self, request, *args, **kwargs): 

      if request.user.user_type in user_type: 
       return self.view_func(request, *args, **kwargs) 
      else: 
       return Response(status=status.HTTP_403_FORBIDDEN) 

    return Permission 

so nehme ich an einem meiner API wollen eine Art von Benutzer zu accesed ich tun:

@permit(["A"]) 
def myview(request): 
    # return some reponse 

Dies funktioniert gut, aber ich habe beunruhigend e, um dies für klassenbasierte Ansichten zu konvertieren.

Ich habe versucht, den Versand-Methode zu dekorieren:

@method_decorator(permit_only(["A",])) 
def dispatch(self, request, *args, **kwargs): 
    return super(UserList, self).dispatch(*args, **kwargs) 

Aber ich erhalte eine Fehlermeldung:

AssertionError(u'.accepted_renderer not set on Response',) 

Antwort

0

Einer der Abhilfe, die ich für diese kam, ist die IsAuthenticated Klasse wie folgt und Pass zu Unterklasse es zu permission_classes in CBV oder als Dekorator für FBV

class PermA(IsAuthenticated): 

    def has_permission(self, request, view): 
     resp = super(PermA, self).has_permission(request, view) 
     return getattr(request.user, "user_type", None) == "A" and resp