2010-08-31 138 views
1

我有一箇中間件,檢查會話值並根據該值重定向。我的問題是,它創建了一個無限重定向循環,我不知道爲什麼。django中間件重定向無限循環

所以,我想要做的是檢查會話的可見值是否爲yes,如果沒有將用戶重定向到我的測試視圖。

這裏是我的中間件:

class CheckStatus(object): 

    def process_request(self, request):  
     if request.user.is_authenticated():     

       s = request.session.get('visible') 
       if str(s) is not 'yes': 
        return HttpResponseRedirect(reverse("myapp.myview.views.test")) 
+0

您缺少如何配置'myapp.myview.views.text'的URL的信息。我想它應該是「/ tests /」 - 否則可能導致無限循環... – 2010-08-31 21:38:19

+0

是的,myapp.myview.views.text url應該是「/ test /」。因此,如果可見的會話不是,我想將用戶重定向到「/ test /」 – imns 2010-08-31 21:53:18

+0

如果沒有設置密鑰,還應該確保使用默認值填充s:'s = request.session.get ('可見','否')'。 – 2010-08-31 22:09:25

回答

3

你至少應該避免將其投放一些媒體文件時運行:

from django.conf import settings 

class CheckStatus(object): 

    def process_request(self, request):  
     if request.user.is_authenticated():     
      if not request.path.startswith(settings.MEDIA_URL): 
       s = request.session.get('visible') 
       if str(s) is not 'yes': 
        return HttpResponseRedirect(reverse("myapp.myview.views.test")) 

但更血統的方式似乎是使用process_view-method

+0

有趣的是,我嘗試了同樣的事情,但它仍然被稱爲每個媒體文件被加載。 – imns 2010-09-01 00:11:56

+0

在開發服務器上爲每個媒體請求調用一個視圖,您還需要在'process_view'中排除該視圖! – 2010-09-01 08:50:04