2010-08-31 18 views
1

J'ai un middleware qui vérifie une valeur de session et redirige en fonction de cette valeur. Mon problème est, il est en train de créer une boucle de redirection infinie et je ne sais pas pourquoi. Donc, ce que je veux faire est de vérifier si la valeur de la session visible est oui et si ce n'est pas rediriger l'utilisateur vers ma vue de test.middleware django rediriger boucle infinie

Voici mon middleware:

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

Il vous manque les informations sur la configuration des urls de 'myapp.myview.views.text'. Je suppose que cela devrait être "/ tests /" - sinon cela pourrait résulter en une boucle infinie ... –

+0

Oui, l'URL myapp.myview.views.text devrait être "/ test /". Donc, si la session visible n'est pas oui, je veux rediriger l'utilisateur vers "/ test /" – imns

+0

Vous devez également veiller à remplir s avec une valeur par défaut si la clé n'est pas définie: 's = request.session.get ('visible', 'non') '. –

Répondre

3

Vous devriez au moins éviter d'avoir courir au moment de servir des fichiers multimédias:

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")) 

Mais la façon plus descente semble utiliser le process_view-method!

+0

intéressant, j'ai essayé la vue du processus en pensant la même chose, mais il est toujours appelé pour chaque fichier multimédia qui est chargé. – imns

+0

sur le serveur de développement une vue est appelée pour chaque demande de média, vous devez également l'exclure dans 'process_view'! –