2017-04-21 34 views
0

我有蒂斯views.py如何索要登錄訪問任意URL的Django

@login_required() 
def dadmin(request): 

我沒有使用過@login_required()在dapost和dapage

而且在url.py

url(r'^dadmin/$', dadmin, name='dadmin'), 
url(r'^dadmin/post/$', dapost, name='dapost'), 
url(r'^dadmin/page/$', dapage, name='dapage'), 

現在我想要的是每當用戶嘗試訪問domain.com/dadmin/any ...它重定向到登錄頁面。我該怎麼做?沒有將@login_required()放在dapost和dapage中?

回答

1

您可以通過使用自定義的中間件

保存爲custom_middleware.py文件在你的主應用程序

from django.shortcuts import redirect 


class CheckUser(object): 

    def __init__(self, get_response): 

     self.get_response = get_response 

    def __call__(self, request): 

     if not request.user.is_authenticated() and \ 
         request.path.startswith('/dadmin/'): 
      return redirect("/login/") 

     response = self.get_response(request) 


     return response 

,並在您settings.py編輯做了middleware

MIDDLEWARE = [ 
    'django.middleware.security.SecurityMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    #custom middlewares 
    'app.custom_middleware.CheckUser' 
] 
+0

它工作。 SyntaxError:在Python3中調用'print'時缺少圓括號___ **修復python3 **'print'init工作「'到'print(」init working「)'謝謝! –

+0

@DevkotaSagar刪除該行打印(「init工作」)。我用於調試 – Thameem

+0

好的,那麼可以def __init __(self,get_response):也被刪除? –

0

如果您在settings.py設置LOGIN_URL:

https://docs.djangoproject.com/en/1.8/ref/settings/#login-url

所有匿名用戶將在他們的意見login_required()裝飾訪問到的網址時被重定向。

編輯:你可以製作一個自定義的LoginRequiredMiddleware,也可以使用你想要的路徑。

+0

我想重定向到登錄到像.com/dadmin/post或.com/dadmin/page或.com/dadmin /(任何)訪問的任何鏈接。不僅僅是來自views.py –

+0

你爲什麼不把裝飾器放在dapost,dapage和所有需要這種行爲的視圖中? – XaviP

+0

您也可以製作自定義的LoginRequiredMiddleware,並提供您所需的路徑。在答案中編輯。 – XaviP