有一个Project
模型与模型具有多对多关系User
,使用连接表。如果用户不是项目的成员(不在连接表中),我想阻止用户访问显示特定项目的视图。
我知道它可以通过视图方法中的简单 if 语句或模板中的自定义过滤器来解决,但我希望能够使用自定义装饰器来做到这一点。这可能吗?如果是这样怎么做?
就像是:
def may_user_view_this(function):
def wrapper(request, *args, **kwargs):
user = request.user
project = Project.objects.get(id=???????) #id
if not project.has_user(user):
return HttpResponse('You cannot view this.')
else:
return function(request, *args, **kwargs)
return wrapper
@may_user_view_this() # if not go the specific url
def my_view(request, page_id=None):
# do stuff and render
如何访问从装饰器函数page_id
发送到的参数?my_view