使用连接表,Project
模型与User
模型具有ManyToMany关系。
如果用户不是项目的成员(不在连接表中),我想阻止用户访问显示特定项目的视图。
我知道它可以通过view方法中的简单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
?
答案 0 :(得分:2)
当然这是可能的,这就是装饰者的目的。