簡體   English   中英

staff_member_required 和 user_passes_test 之間的區別

[英]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_teststaff_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM