Я создал страницу входа в систему с помощью принудительной регистрации на нескольких страницах. Теперь мне нужно перенаправить обратно на предыдущую страницу после успешного входа в систему.Переадресация назад на предыдущую страницу после входа в систему (Django)
Когда я заставляю логин @login_required(login_url='/login/')
. Он включает в себя параметр next
в строке запроса.
Я попытался поймать его с redirect_to = request.REQUEST.get('next', '')
и отправить его для перенаправления return HttpResponseRedirect(redirect_to)
но не работает.
view.py
def login(request):
def errorHandle(error):
form = LoginForm()
return render_to_response('login/login.html', {
'error' : error,
'form' : form,
})
if request.method == 'POST': # If the form has been submitted...
form = LoginForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
username = request.POST['username']
password = request.POST['password']
redirect_to = request.REQUEST.get('next', '')
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
# Redirect to a success page.
auth_login(request, user)
return HttpResponseRedirect(redirect_to)
# return render_to_response('login/logged_in.html', {
# 'username': username,
# })
else:
# Return a 'disabled account' error message
error = u'Account Disabled'
return errorHandle(error)
else:
# Return an 'invalid login' error message.
error = u'Invalid Login'
return errorHandle(error)
else:
error = u'Form is Invalid'
return errorHandle(error)
else:
form = LoginForm() # An unbound form
return render_to_response('login/login.html', {
'form': form,
})
шаблон
<div id="login_form">
<form action="." method="post">
{{ form.as_p }}
<input type="submit" value="Login">
</form>
</div>
EDIT - я нашел проблему. Это проблема с моим шаблоном. Эта форма ниже работает нормально.
<form action="" method="post">
<label for="username">User name:</label>
<input type="text" name="username" value="" id="username">
<label for="password">Password:</label>
<input type="password" name="password" value="" id="password">
<input type="submit" value="Login" id="button"/>
<input type="hidden" name="next" value="{{ next|escape }}" />
</form>
Почему бы не использовать встроенный [login] (https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login) просмотр? Почему бы не по крайней мере [посмотреть его код] (https://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L25), чтобы узнать, как он перенаправляется? – DrTyrsa
@DrTyrsa Я не знаю, как использовать встроенный логин:/можете ли вы найти проблему с этим кодом? – ChamingaD
Вы читали [документы] (https://docs.djangoproject.com/en/dev/topics/auth/) в auth? Там что-то неясно? – DrTyrsa