2016-10-25 44 views

回答

4

您可以使用user_passes_teststaff_member_required裝飾爲您與您的網址(與/staff/開始)關聯的觀點,一個例子可能如下:

隨着user_passes_test裝飾:

from django.contrib.auth.decorators import user_passes_test 

@user_passes_test(lambda u: u.is_staff, login_url='/some_url/') 
def your_view(request, ...): 
    # Only for staff 

With staff_member_required裝修工:

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

@staff_member_required 
def your_view(request, ...): 
    # Only for staff 
+0

如果我有20個工作人員的意見,那麼我需要添加這個所有的意見。我認爲第一個答案是最好的。 –

+0

我覺得你對'login_required'裝飾器也需要登錄的視圖。當然,中間件的解決方案也很好。 – ettanany

3

使用自定義中間件。如果URL以/ staff /開頭並且request.user不是員工,則引發Http404或向客戶端返回一些特殊消息。

下面是一個例子:

對於django的版本< 1.10:

class StaffCheckMiddleware(object): 
    def process_request(self, request): 
     full_path = request.get_full_path() 
     if full_path.startswith('/staff/') and not request.user.is_staff: 
      raise Http404  

對於django的版本1.10或以上:

class StaffCheckMiddleware(object): 
    def __init__(self, get_response): 
     self.get_response = get_response 

    def __call__(self, request): 
     full_path = request.get_full_path() 
     if full_path.startswith('/staff/') and not request.user.is_staff: 
      raise Http404 

     response = self.get_response(request) 
     return response 

然後在settings.py添加StaffCheckMiddleware

+0

Django 1.10中的錯誤。在load_middleware mw_instance =中間件(處理程序) TypeError:object()不帶參數 –

+0

@KareshA似乎Django在1.10中升級了它的中間件風格,我更新了django 1.10的答案,請檢查它是否適合您。 –