pythondjangopython-3.xdjango-2.1

How to redirect url from middleware in Django?


How to redirect url from middleware?

Infinite loop problem.

I intend to redirect the user to a client registration url if the registration has not yet been completed.

def check_user_active(get_response):
    def middleware(request):
        response = get_response(request)

        try:
            print(Cliente.objects.get(usuario_id=request.user.id))
        except Cliente.DoesNotExist:
            return redirect('confirm')


        return response
    return middleware

Solution

  • Every request to server goes through Middleware. Hence, when you are going to confirm page, the request goes through middleware again. So its better put some condition here so that it ignores confirm url. You can try like this:

    def check_user_active(get_response):
        def middleware(request):
            response = get_response(request)
            if not request.path == "confirm":
                try:
                    print(Cliente.objects.get(usuario_id=request.user.id))
                except Cliente.DoesNotExist:
                    return redirect('confirm')
            return response
        return middleware