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

我想使用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.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))