2012-08-17 29 views

Trả lời

90

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): 
    ... 
33

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): 
    ... 
+4

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. –

+18

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

+2

Nó là @ Bit68. Tôi đang tìm nó :) –

1

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.

Các vấn đề liên quan