django @login_required超级用户的装饰器

Mad*_*gan 72 django django-views

django中是否有类似于@login_required的装饰器,它还测试用户是否是超级用户?

谢谢

dge*_*gel 134

使用user_passes_test装饰者:

from django.contrib.auth.decorators import user_passes_test

@user_passes_test(lambda u: u.is_superuser)
def my_view(request):
    ...
Run Code Online (Sandbox Code Playgroud)

  • 我怎样才能在 CBV 中做到这一点? (2认同)
  • 为了确保用户是活跃用户,除了“@user_passes_test”之外,您还可以使用“@staff_member_required”。 (2认同)

Bit*_*t68 58

如果员工成员资格充足,您可以使用@staff_member_required装饰者:

from django.contrib.admin.views.decorators import staff_member_required

@staff_member_required
def my_view(request):
    ...
Run Code Online (Sandbox Code Playgroud)

  • 当我来到这里时,这就是我所寻找的,这就是为什么我把它放在这里,我会留在这里,因为我认为它对其他人有用. (32认同)
  • 这是@ Bit68.我在找:) (2认同)

小智 7

如果您想拥有与@staff_member_required 类似的功能,您可以轻松编写自己的装饰器。以@staff_member 为例,我们可以这样做:

from django.contrib.auth import REDIRECT_FIELD_NAME
from django.contrib.admin.views.decorators import user_passes_test

def superuser_required(view_func=None, redirect_field_name=REDIRECT_FIELD_NAME,
                   login_url='account_login_url'):
    """
    Decorator for views that checks that the user is logged in and is a
    superuser, redirecting to the login page if necessary.
    """
    actual_decorator = user_passes_test(
        lambda u: u.is_active and u.is_superuser,
        login_url=login_url,
        redirect_field_name=redirect_field_name
    )
    if view_func:
        return actual_decorator(view_func)
    return actual_decorator
Run Code Online (Sandbox Code Playgroud)

这个例子是修改过的staff_member_required,只是在lambda中修改了一个check。

  • 您还需要此导入语句:) `from django.contrib.auth import REDIRECT_FIELD_NAME` (4认同)