Python 登录后重定向回上一页(Django)
我已经在几个页面中创建了登录页面强制登录。现在我需要重定向回前一页后成功登录 当我通过Python 登录后重定向回上一页(Django),python,django,Python,Django,我已经在几个页面中创建了登录页面强制登录。现在我需要重定向回前一页后成功登录 当我通过@login\u required(login\u url='/login/')强制登录时。它在查询字符串中包含next参数 我试图用redirect\u to=request.request.get('next','')捕获它,并将它发送到redirectreturn-HttpResponseRedirect(redirect\u to),但没有成功 view.py def login(request):
@login\u required(login\u url='/login/')强制登录时
。它在查询字符串中包含next
参数
我试图用redirect\u to=request.request.get('next','')捕获它,并将它发送到redirectreturn-HttpResponseRedirect(redirect\u 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>
{{form.as_p}}
编辑-我发现了问题。我的模板有问题。下面的表格很好用
<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>
用户名:
密码:
您可以将以下内容添加到表单中:
<input type="hidden" value="{% if request.REQUEST.next %}{{ request.REQUEST.next }}{% else %}{% if request.META.HTTP_REFERER %}{{ request.META.HTTP_REFERER }}{% else %}/{% endif %}{% endif %}" name="next" />
以下是它处理的案例:
如果用户来自需要登录的视图:下一步由需要登录设置
如果用户来自登录表单(即身份验证未通过):next=先前设置的next值
如果用户来自非登录视图,则需要查看:下一步=参考url
如果用户直接打开登录页面:下一步=/
请注意,这也适用于您应该使用的外部登录视图
作为一个好东西,这里是我的注销模板的一部分,它将用户重定向到他注销前的页面
{% block body %}
<p>{% trans "You've been logged out." %}</p>
{% if '/account/logout/' not in request.META.HTTP_REFERER %}
<p>
{% trans 'You will be redirected in a second' %}
</p>
{% endif %}
{% endblock %}
{% block extra_body %}
{% if '/account/logout/' not in request.META.HTTP_REFERER %}
<script type="text/javascript">
document.location.href = '{{ request.META.HTTP_REFERER }}';
</script>
{% endif %}
{% endblock %}
{%block body%}
{%trans“您已注销。”%}
{%if'/account/logout/'不在request.META.HTTP_REFERER%}
{%trans'您将在第二个“%”中被重定向
{%endif%}
{%endblock%}
{%block extra_body%}
{%if'/account/logout/'不在request.META.HTTP_REFERER%}
document.location.href='{{request.META.HTTP_REFERER}}';
{%endif%}
{%endblock%}
我要感谢雇用我的伟大创业公司,因为他们允许我分享代码,并利用我的一些时间帮助他人。但是我链接它的真正原因是为了让你可以测试它。如果此代码不适合您,就像它在那里一样,那么您还有另一个问题。为什么不使用内置视图?为什么不至少看看它是如何实现重定向的?@DrTyrsa我不知道如何使用内置登录:/你能找到这个代码的问题吗?你读过auth吗?有什么不清楚的地方吗?@DrTyrsa我在哪里可以获得auth的/account/files。同样的问题:重新发明有什么意义?我想教育目的是合理的。就我个人而言,我已经多年没有做任何与登录视图相关的事情了,我一直忙于关注是什么让我的应用与众不同。。。感谢Pinax提供了包含所有这些样板文件的入门项目。但在此之前,我确实手动完成了这项工作,这有助于我理解正在发生的事情。我认为,研究内置视图的代码对于教育目的更有用。例如,您可以了解有关测试cookie和重定向安全检查的信息。@jpic我已将您的代码添加到表单模板中。它说“在呈现时捕获到NoReverseMatch:为'me'反向,未找到参数'()'和关键字参数'{}”。@DrTyrsa:感谢您的反馈,最后我同意您的意见,并粘贴了一个a实际实现的解决方案。它简单而愚蠢,依赖于模板和经典的“next”参数支持。答案是IMHO,现在好多了,谢谢分享你的一些见解。