Có một trang trí trong django tương tự như @login_required cũng kiểm tra xem người dùng có phải là siêu người dùng không?django @login_required trang trí cho một superuser
Cảm ơn
Có một trang trí trong django tương tự như @login_required cũng kiểm tra xem người dùng có phải là siêu người dùng không?django @login_required trang trí cho một superuser
Cảm ơn
Sử dụng user_passes_test
trang trí:
from django.contrib.auth.decorators import user_passes_test
@user_passes_test(lambda u: u.is_superuser)
def my_view(request):
...
Trong trường hợp thành viên đội ngũ nhân viên là đủ, bạn có thể sử dụng @staff_member_required
trang trí:
from django.contrib.admin.views.decorators import staff_member_required
@staff_member_required
def my_view(request):
...
Nếu bạn muốn có chức năng tương tự như @staff_member_required bạn có thể dễ dàng viết trang trí của riêng bạn. Lấy @staff_member làm ví dụ chúng ta có thể làm sth như thế này.
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
Ví dụ này là sửa đổi staff_member_required, vừa thay đổi một lần kiểm tra trong lambda.
Tôi đã bỏ phiếu vì thành viên của nhân viên không được phép giống như superuser. –
Khi tôi đến đây là những gì tôi đang tìm kiếm, đó là lý do tại sao tôi đặt nó ở đây, và tôi sẽ để nó ở đây vì tôi nghĩ nó có thể hữu ích cho người khác. – Bit68
Nó là @ Bit68. Tôi đang tìm nó :) –