2011-09-12 73 views
0

我注意到Django的管理區域有一個有趣的問題。如果我撤銷我的員工權限並嘗試直接訪問/admin,我通常會希望重定向到我的登錄頁面,並在查詢字符串中使用/admin/作爲未來的重定向。然而,我得到一個合適的頁面返回HTTP代碼200實際上使用我的admin/login.html模板來呈現請求的頁面,而不是重定向。看來問題在於裝飾器@staff_member_required,管理員意見明顯使用。如何重定向試圖訪問Django中管理區域的用戶?

問題是:這樣做的目的是?如果沒有,我怎樣才能改變這種行爲,沒有太多的猴子補丁?

回答

0

這是故意的,因爲很多人在thier網站可能阻止訪問管理面板實現重定向。因爲管理面板是它自己的應用程序,所以它重定向到它自己。

# Put this code somewhere it will be imported REALLY early 

from django.contrib.admin.views import decorators 

def staff_member_required(view_func): 
    """ 
    Decorator for views that checks that the user is logged in and is a staff 
    member, displaying the login page if necessary. 
    """ 
    def _checklogin(request, *args, **kwargs): 
     if request.user.is_active and request.user.is_staff: 
      # The user is valid. Continue to the admin page. 
      return view_func(request, *args, **kwargs) 
     else: 
      return HTTPResponseRedirect('/my/login/page/') 
    return wraps(view_func)(_checklogin) 

decorators.staff_member_required = staff_member_required #replaces the function in-place 
相關問題