在Django中为特定视图设置用户权限

时间:2015-10-12 17:18:19

标签: django django-admin django-views

我正在使用Django创建一个包含许多不同页面的网站。我只有视图,我没有在我的项目中定义任何模型。我希望某些用户具有受限制的访问权限(他们只能看到我创建的一些视图)。我已经在Django管理站点中设置了一些用户,并使用Python @login_required装饰器向我的网站添加了登录功能。

我对如何为每个用户设置查看权限感到有点迷失。我查看了@permission_required装饰器,但它似乎只适用于模型而不是视图。如何在Django中设置页面查看权限?

4 个答案:

答案 0 :(得分:3)

您应该使用user_passes_test装饰器来查看视图。 Django文档有一个很好的例子,它的用法 https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.user_passes_test

编辑:实际上你也可以使用permission_required装饰器来查看视图 https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.decorators.permission_required

答案 1 :(得分:2)

权限与模型相关联。如果您的授权逻辑链接到视图而不是模型,请考虑创建组并使用user_passes_test装饰器。例如,假设您有一个只有主管可以看到的报告:创建一个名为Supervisors的组并测试成员身份:

def must_be_supervisor(user):
    return user.groups.filter(name='Supervisors').count()

@user_passes_test(must_be_supervisor)
def quarter_report(request):
    ...

答案 2 :(得分:1)

看看django-braces。对于这个目的,它是一个极好的应用程序; https://django-braces.readthedocs.org/en/latest/index.html

它为几乎所有在视图中使用的可能性提供了mixin&允许您执行检查以限制访问方式的表单。

答案 3 :(得分:1)

你可以在urls中使用permission_required来锁定

示例:https://docs.djangoproject.com/en/3.2/topics/class-based-views/intro/#decorating-in-urlconf