登录表单的视图中不存在用户匹配查询

时间:2015-10-06 16:35:07

标签: python django

在forms.py中的LoginForm

class LoginForm(forms.Form):
    username = forms.CharField(label='Username', max_length=30)
    password = forms.CharField(
        label='Password',
        widget = forms.PasswordInput(),
    )

    def clean_username(self):
        username = self.cleaned_data['username']

        try:
            User.objects.get(username = username)
            user.objects.get(username = username)
        except ObjectDoesNotExist:
            raise forms.ValidationError('Invalid Username or Password!')

    def clean_password(self):
        password1 = self.cleaned_data['password']
        username = self.cleaned_data['username']
        user = User.objects.get(username = username)
        password2 = user.password

        if user.check_password(password1):
            return password1
        else:
            raise forms.ValidationError('Invalid Username or Password!')
在views.py中

login_page

def login_page(request):
    template = get_template('login_page.html')
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                login(request, user)
                return HttpResponseRedirect('/user/username')

    else:
        form = LoginForm()

    variables = RequestContext(request, {
            'form': form
        })
    return render_to_response('login_page.html', variables)

login_page.html模板

{% extends "base.html" %}
{% block title %}User Login{% endblock %}
{% block head %}User Login{% endblock %}
{% block content %}
{% if form.has_errors %}
    <p>Your username and password didn't match. 
       Please try again.</p>
{% endif %}
<form method="post" action=".">
<p><label for="id_username">Username:</label> 
{{ form.username }}</p>
<p><label for="id_password">Password:</label> 
{{ form.password }}</p>
<input type="submit" value="login" />
<input type="hidden" name="next" value="/" />
</form>
{% endblock %}

localhost:8000 / login / 调用上述视图会导致用户匹配查询不存在错误。我无法准确地理解原因。我使用的是Django 1.8使用的默认身份验证系统。

我是Django的新手。请帮帮我。

1 个答案:

答案 0 :(得分:0)

该例外来自:

   user = User.objects.get(username = username)
clean_password中的

。您已经知道如何修复此错误,您已在clean_username中通过tryexcept对该查询进行了处理,以避免此错误。