![](/img/trans.png)
[英]@staff_member_required is throwing “object has no attribute 'user'”
[英]Difference between staff_member_required and user_passes_test
我對這兩個裝飾器的使用有疑問。 在我的項目中,我有一些觀點,我將只允許工作人員訪問。 這些是限制區域,員工可以在其中創建帖子或修改有關用戶配置文件的內容。 此區域是我的 web 站點的管理區域,但不是默認的 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.