4

我只是想运行一个简单的{% if user.is_authenticated %}. 但它总是返回False

这是我所有的文件。

views.py

from django.shortcuts import render_to_response, redirect
from django.core.urlresolvers import reverse
from django.template import RequestContext
from django.contrib.auth.models import User
from django.http import HttpResponse
from django.contrib.auth.hashers import *
from forms import UserLoginForm
from models import UserLogin

def index(request):
    return render_to_response('index.html', context_instance = RequestContext(request))

def login(request):
    if request.method == 'POST':
        form = UserLoginForm(request.POST or None)
        if form.is_valid():
            email_from_form = form.cleaned_data['email']
            password_from_form = form.cleaned_data['password']
            users = User.objects.filter(email = email_from_form)

            for j in users:
                if j.email == email_from_form:
                    pass_match = check_password(password_from_form, j.password)
                    if pass_match:
                        return redirect(reverse('profile'), context_instance = RequestContext(request))
                    else:
                        return HttpResponse('Entered password did not match')
                else:
                    return HttpResponse('Entered email does not exist')
        else:
            return HttpResponse(form.errors)
    else:
        form = UserLoginForm()

    return render_to_response('login.html', {'form':form}, context_instance = RequestContext(request))


def profile(request):

    return render_to_response('profile.html', context_instance = RequestContext(request))

forms.py

from django import forms

class UserLoginForm(forms.Form):
    email = forms.EmailField(max_length = 100)
    password = forms.CharField(max_length = 100)

models.py

from django.db import models

class UserLogin(models.Model):
    email = models.EmailField(max_length = 100)
    password = models.CharField(max_length = 100)

    def __unicode__(self):
        return self.email

profile.html

<html>
<head>
    <title>profile</title>
</head>
<body>
    {% if user.is_authenticated %}
        Welcome user, you are loged in..
    {% else %}
        You are not logged in
    {% endif %}
</body>
</html>

login.html

<html>
<head>
    <title>login</title>
</head>
<body>
    <form action="{% url login %}" method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" id="submit" name="submit" value="Login" />
    </form>

</body>
</html>

它总是回来You are not logged in

我是 django 的新手,我不明白为什么会这样。

4

1 回答 1

9

您永远不会登录您的用户。请尝试以下几行:

from django.contrib.auth import authenticate, login as auth_login

if request.method == 'POST':
    form = UserLoginForm(request.POST or None)
    if form.is_valid():
        username = User.objects.get(email=form.cleaned_data['email'])
        password = form.cleaned_data['password']
        user = authenticate(username=username, password=password)
        if user:
            if user.is_active:
                auth_login(request, user)
                return HttpResponseRedirect(request.GET.get('next',
                                            settings.LOGIN_REDIRECT_URL))
        else:
            error = 'Invalid username or password.'

为了清楚起见,更新以使用您的表格;排除错误检查。

于 2012-10-30T09:38:09.953 回答