我在Safari中使用Django登录表单时遇到问题,该表单在Chrome和IE中都能成功运行。
在Chrome / IE中使用时,表单都会正确返回用户名/密码(如果需要),输入正确的用户名/密码后会将用户登录并重定向到{{next}}。
在safari下,用户名/密码错误也可以正常运行,但输入有效的用户名和密码后,用户将被重定向回登录页面,而不是{{next}}。
这是我的登录视图:
def login_user(request):
next = request.GET['next']
state = ""
username = password = ""
if request.POST:
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username = username, password = password)
if user is not None:
if user.is_active:
login(request, user)
return HttpResponseRedirect(next)
else:
state = "You're account is not active"
else:
state = "Your're username and/or password are incorrect."
return render_to_response('access/login.html', { 'state' : state }, context_instance=RequestContext(request))
和登录模板中的表单:
<form action="" method="post">{% csrf_token %}
<label for="username">username:</label>
<input type="text" id="username" name="username"/>
<label for="password">password:</label>
<input type="password" name="password"/>
<input type="submit" value="Log In" />
<p><strong>{{ state }}</strong></p>
</form>
答案 0 :(得分:0)
好吧,HttpResponseRedirect
无效或next
值错误。
我多次使用过HttpResponseRedirect,到目前为止还没有遇到任何问题。
让我们看看第二个选项。当您在URL参数中传递它时,浏览器可以转义某些字符。所以你得到的结果不起作用。也许如果你在控制台中打印下一个,你会看到什么是错的?
希望它有所帮助!
答案 1 :(得分:0)
这是我的登录模板(位于templates / registration / login.html中),有效:
{% load url from future %}
{% block content %}
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
只需连接到django auth插件,它就可以“正常工作”而无需自定义视图方法。