在 Django 中为特定视图设置用户权限
Set user permissions for specific views in Django
我正在使用 Django 制作一个包含许多不同页面的网站。我只有视图,我没有在我的项目中定义任何模型。我希望某些用户具有受限的访问权限(他们只能看到我创建的部分视图)。我在 Django 管理站点中设置了一些用户,并使用 Python @login_required
装饰器向我的网站添加了登录功能。
虽然我对如何为每个用户设置查看权限有点迷茫。我查看了 @permission_required
装饰器,但它似乎只适用于模型而不适用于视图。 Django中如何设置页面查看权限?
您应该对视图使用 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
看看django-braces
。正是出于这个目的,这是一款出色的应用程序;
https://django-braces.readthedocs.org/en/latest/index.html
它为视图和表单中几乎所有可能发生的情况提供了一个 mixin,允许您执行检查以限制您认为合适的访问。
权限与模型相关联。如果您的授权逻辑链接到视图而不是模型,请考虑创建一个组并使用 user_passes_test 装饰器。例如,假设您有一份只有主管才能看到的报告:创建一个名为主管的组并测试成员资格:
def must_be_supervisor(user):
return user.groups.filter(name='Supervisors').count()
@user_passes_test(must_be_supervisor)
def quarter_report(request):
...
你可以在url中使用permission_required来锁定
示例:https://docs.djangoproject.com/en/3.2/topics/class-based-views/intro/#decorating-in-urlconf
我正在使用 Django 制作一个包含许多不同页面的网站。我只有视图,我没有在我的项目中定义任何模型。我希望某些用户具有受限的访问权限(他们只能看到我创建的部分视图)。我在 Django 管理站点中设置了一些用户,并使用 Python @login_required
装饰器向我的网站添加了登录功能。
虽然我对如何为每个用户设置查看权限有点迷茫。我查看了 @permission_required
装饰器,但它似乎只适用于模型而不适用于视图。 Django中如何设置页面查看权限?
您应该对视图使用 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
看看django-braces
。正是出于这个目的,这是一款出色的应用程序;
https://django-braces.readthedocs.org/en/latest/index.html
它为视图和表单中几乎所有可能发生的情况提供了一个 mixin,允许您执行检查以限制您认为合适的访问。
权限与模型相关联。如果您的授权逻辑链接到视图而不是模型,请考虑创建一个组并使用 user_passes_test 装饰器。例如,假设您有一份只有主管才能看到的报告:创建一个名为主管的组并测试成员资格:
def must_be_supervisor(user):
return user.groups.filter(name='Supervisors').count()
@user_passes_test(must_be_supervisor)
def quarter_report(request):
...
你可以在url中使用permission_required来锁定
示例:https://docs.djangoproject.com/en/3.2/topics/class-based-views/intro/#decorating-in-urlconf