Login and redirection

These are my accounts:

def login(request):

    redirect_to = request.REQUEST.get("next")
    if request.method == 'POST': 

        formL = LoginForm(data=request.POST)           
        if formL.is_valid(): 

            if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
                redirect_to = "/blogs/"

            from django.contrib.auth import login
            login(request, formL.get_user())
            if request.session.test_cookie_worked():
                request.session.delete_test_cookie()
            return HttpResponseRedirect(redirect_to)

    else:

    formL = LoginForm(request)                 

request.session.set_test_cookie()  

return render_to_response('blogs.html', {
    'formL': formL, }, context_instance=RequestContext(request))

login = never_cache (login)

When I go, for example, to example.com/myblog/, then I redirect to example.com/accounts/login/?next=/myblog/

but when I insert the user and psw for login, I am redirected to / blogs / and not / myblog /

Why?

Edit: request.REQUEST.get ('next', '') always returns ''

I do not know why: -\

+3
source share
2 answers

What does your login form template look like?

Your problem

You do not send the path redirect_toto your template, and you need to. Your return should look like this:

return render_to_response('blogs.html', {
        'formL': formL,
        'next': redirect_to,
    }, context_instance=RequestContext(request)
)

The login form action should look like this:

<form action="/your_login_url/?next={{ next }}" method="post">

, /myblog/, /your_login_url/?next=/myblog/, next , /your_login_url/?next=/myblog/ , ​​ /myblog/ ( if request.method == 'POST': ).

, redirect_to = request.REQUEST.get("next") , GET , POST next, GET.

, .

Django, , redirect_field_name: redirect_to,, redirect_field_name next.

return render_to_response(template_name, {
    'form': form,
    redirect_field_name: redirect_to,
    'site': current_site,
    'site_name': current_site.name,
}, context_instance=RequestContext(request))

, , ? . settings.py LOGIN_REDIRECT_URL.

, , django , , .

+8

 not redirect_to or '//' in redirect_to or ' ' in redirect_to

True?


, ? http://docs.python.org/library/logging.html

import logging
LOG_FILENAME = '/tmp/logging_example.out'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)

, (, if)

logging.debug("redirect_to = %s" % redirect_to)

, '/tmp/logging_example.out'

+1

Source: https://habr.com/ru/post/1745243/


All Articles