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)
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)
小智 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。