staff_member_required 和 user_passes_test 之间的区别
Difference between staff_member_required and user_passes_test
我对这两个装饰器的使用有疑问。在我的项目中,我有一些观点,我只允许工作人员访问。这些是限制区域,员工可以在其中创建 post 或修改有关用户个人资料的内容。该区域是我网站的管理区域,但不是默认的 django 管理区域。我创建了一个不使用 django 管理站点的后端区域。
我有这样的看法:
模式 1
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required(login_url='login')
def staff_site(request):
some code here
模式 2
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u:u.is_staff, login_url='login')
def staff_site(request):
some code here
为了我的目标,我必须使用的正确方法是什么?
它们完全一样。我会使用 @staff_member_required
,因为它更少打字。
在后台,Django 使用 user_passes_test
无论如何,staff_member_required
只是一个快捷方式。这是 Django 的源代码:
from django.contrib.auth import REDIRECT_FIELD_NAME
from django.contrib.auth.decorators import user_passes_test
def staff_member_required(view_func=None, redirect_field_name=REDIRECT_FIELD_NAME,
login_url='admin:login'):
"""
Decorator for views that checks that the user is logged in and is a staff
member, redirecting to the login page if necessary.
"""
actual_decorator = user_passes_test(
lambda u: u.is_active and u.is_staff,
login_url=login_url,
redirect_field_name=redirect_field_name
)
if view_func:
return actual_decorator(view_func)
return actual_decorator
我对这两个装饰器的使用有疑问。在我的项目中,我有一些观点,我只允许工作人员访问。这些是限制区域,员工可以在其中创建 post 或修改有关用户个人资料的内容。该区域是我网站的管理区域,但不是默认的 django 管理区域。我创建了一个不使用 django 管理站点的后端区域。
我有这样的看法:
模式 1
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required(login_url='login')
def staff_site(request):
some code here
模式 2
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u:u.is_staff, login_url='login')
def staff_site(request):
some code here
为了我的目标,我必须使用的正确方法是什么?
它们完全一样。我会使用 @staff_member_required
,因为它更少打字。
在后台,Django 使用 user_passes_test
无论如何,staff_member_required
只是一个快捷方式。这是 Django 的源代码:
from django.contrib.auth import REDIRECT_FIELD_NAME
from django.contrib.auth.decorators import user_passes_test
def staff_member_required(view_func=None, redirect_field_name=REDIRECT_FIELD_NAME,
login_url='admin:login'):
"""
Decorator for views that checks that the user is logged in and is a staff
member, redirecting to the login page if necessary.
"""
actual_decorator = user_passes_test(
lambda u: u.is_active and u.is_staff,
login_url=login_url,
redirect_field_name=redirect_field_name
)
if view_func:
return actual_decorator(view_func)
return actual_decorator