django 1.7中的自定义登录页不起作用
我想使用django 1.7中的电子邮件地址和密码创建自己的登录页面。 完成此框后,我单击登录页面返回登录页面 我的看法是:django 1.7中的自定义登录页不起作用,django,email,view,login,Django,Email,View,Login,我想使用django 1.7中的电子邮件地址和密码创建自己的登录页面。 完成此框后,我单击登录页面返回登录页面 我的看法是: def get_user_by_email(email): try: return User.objects.get(email=email) except User.DoesNotExist: return None def login_by_email(request): email = request.PO
def get_user_by_email(email):
try:
return User.objects.get(email=email)
except User.DoesNotExist:
return None
def login_by_email(request):
email = request.POST.get('email')
password = request.POST.get('password')
username = get_user_by_email(email)
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active():
login(request, email)
return HttpResponseRedirect(reverse("myapp:dashboard"))
return render_to_response('myapp/login.html', context_instance=RequestContext(request))
我的网址:
url(r'^login/$', views.login_by_email, name='login'),
我的模板login.html
{% block content %}
<form class="form-horizontal" name="LoginForm" action="{% url 'myapp:login' %}" method="post">
{% csrf_token %}
<div class="control-group">
<label class="control-label" for="email">Email</label>
<div class="controls">
<input type="text" id="email" value="{{email}}" placeholder="Email">
</div>
</div>
<div class="control-group">
<label class="control-label" for="password">Password</label>
<div class="controls">
<input type="password" name="password" id="password" placeholder="Password">
</div>
</div>
<div class="control-group">
<div class="controls">
<button type="submit" class="btn">Login</button>
</div>
</div>
</form>
{% endblock %}
这一行:
username = get_user_by_email(email)
应该是:
user_instance = get_user_by_email(email)
if user_instance:
username = user_instance.username
您正在传递用户对象进行身份验证,但它无法让用户登录。
此外,在调用登录函数时,应将用户作为参数传递:
login(request, user)
您当前正在传递电子邮件,django无法以这种方式处理
有关如何处理自定义登录机制的更多详细信息,请参阅auth
编辑:这是完整的视图代码
解释什么不起作用,这样我可以进一步帮助您该代码给出相同的结果:def login_by_emailrequest:email=request.POST.get'email',password=request.POST.get'password',user_instance=get_user_by_emailemail如果user_instance:username=user_instance.username=authenticateusername=username,password=password(如果用户不是None):如果user.is_处于活动状态:loginrequest,用户返回HttpResponseRedirectreverse'freedays:dashboard'返回render_to_response'freedays/login.html',context_实例=RequestContextrequestNot代码。服务器输出什么?您是否被重定向到同一页面?您是否确定您提供的凭据和/或电子邮件是正确的?第一个查询是否返回内容?是的,我在同一页面上被重定向,从服务器上获得:[09/Feb/2015 05:40:56]POST/myapp/login/HTTP/1.1 200 15464凭据一定是错误的,然后。。。User.objects.getemail=电子邮件是否返回用户对象?
def get_user_by_email(email):
try:
return User.objects.get(email=email)
except User.DoesNotExist:
return None
def login_by_email(request):
email = request.POST.get('email')
password = request.POST.get('password')
user_instance = get_user_by_email(email)
if user_instance:
username = user_instance.username
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
return HttpResponseRedirect(reverse("myapp:dashboard"))
return render_to_response('myapp/login.html', context_instance=RequestContext(request))