如何使用 Django 为视图设置站点范围的密码保护和权限要求?
How can I set up site-wide password protection and privilege requirements on views with Django?
我的 Django 应用程序供我工作的公司内部使用;但是,需要对其进行设置,以便只有具有登录凭据的某些员工才能访问任何网页。此外,我需要能够自定义视图,以便只有具有适当权限的帐户才能访问它们。我该怎么做?
我的直觉是使用与管理站点相同的密码保护和权限系统,因为我的项目基本上只是为了方便地查看和编辑数据库。但是,Google 似乎没有提供有关如何执行此操作的任何信息,而且我只使用 Django 一个半月,所以我自己也没有足够的能力来解决这个问题.有没有办法使用管理站点的密码保护和权限系统,或者它是否无法访问?
如果员工权限足够,这可以使用 staff_member_required
视图装饰器轻松完成。您只需要将装饰器应用于您的视图
staff_member_required 示例:
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def random_view(request):
#If the user does not have staff privileges he will be redirected to a login page
如果您想测试更具体的权限,您应该使用 user_passes_test
装饰器。参见:Django User Passes Test Decorator
您将装饰器应用到您的视图并传递一个函数作为参数来验证用户是否应该有权访问该页面,如果函数 returns True
访问被正常授予,否则用户将被重定向。
user_passes_test 示例:
from django.contrib.auth.decorators import user_passes_test
def user_is_author(user)
#your test goes here, pseudo code example ignore syntax.
return user.is_author
@user_passes_test(user_is_author)
def random_view(request):
#if user passed the test the view will work normally
我的 Django 应用程序供我工作的公司内部使用;但是,需要对其进行设置,以便只有具有登录凭据的某些员工才能访问任何网页。此外,我需要能够自定义视图,以便只有具有适当权限的帐户才能访问它们。我该怎么做?
我的直觉是使用与管理站点相同的密码保护和权限系统,因为我的项目基本上只是为了方便地查看和编辑数据库。但是,Google 似乎没有提供有关如何执行此操作的任何信息,而且我只使用 Django 一个半月,所以我自己也没有足够的能力来解决这个问题.有没有办法使用管理站点的密码保护和权限系统,或者它是否无法访问?
如果员工权限足够,这可以使用 staff_member_required
视图装饰器轻松完成。您只需要将装饰器应用于您的视图
staff_member_required 示例:
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def random_view(request):
#If the user does not have staff privileges he will be redirected to a login page
如果您想测试更具体的权限,您应该使用 user_passes_test
装饰器。参见:Django User Passes Test Decorator
您将装饰器应用到您的视图并传递一个函数作为参数来验证用户是否应该有权访问该页面,如果函数 returns True
访问被正常授予,否则用户将被重定向。
user_passes_test 示例:
from django.contrib.auth.decorators import user_passes_test
def user_is_author(user)
#your test goes here, pseudo code example ignore syntax.
return user.is_author
@user_passes_test(user_is_author)
def random_view(request):
#if user passed the test the view will work normally