【发布时间】:2016-08-16 07:55:21
【问题描述】:
我的应用程序中的用户很少,例如 A、B 和 C。一旦任何类型的用户通过身份验证,我不希望该用户访问我的所有 API
所以对于基于函数的视图,我已经实现了一个装饰器:
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
所以假设我希望我的一个 API 被我做的 A 类用户访问:
@permit(["A"])
def myview(request):
# return some reponse
这工作正常,但我无法将其转换为基于类的视图。
我尝试装饰调度方法:
@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',)
【问题讨论】:
标签: python django-rest-framework decorator django-authentication django-class-based-views