Django自定义装饰器的自定义权限

时间:2013-02-23 16:58:00

标签: django permissions python-decorators

使用连接表,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

1 个答案:

答案 0 :(得分:2)

当然这是可能的,这就是装饰者的目的。