2
我在我的應用程序很少有用戶說A,B和C.一旦任何類型的用戶進行身份驗證,我不希望這個用戶訪問我的所有API的在Django的REST框架類爲本次定製的裝飾
所以基於函數的觀點我實現了一個裝飾:
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
所以假設我要被accesed到一類用戶的我的API的一個我做的:
@permit(["A"])
def myview(request):
# return some reponse
這工作得很好,但我有troubl e將其轉換爲基於類的視圖。
我試圖來裝飾調度方法:
@method_decorator(permit_only(["A",]))
def dispatch(self, request, *args, **kwargs):
return super(UserList, self).dispatch(*args, **kwargs)
但我得到一個錯誤:
AssertionError(u'.accepted_renderer not set on Response',)