4

有一个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

4

0 回答 0