在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的新手。请帮帮我。
答案 0 :(得分:0)
该例外来自:
user = User.objects.get(username = username)
clean_password
中的。您已经知道如何修复此错误,您已在clean_username
中通过try
,except
对该查询进行了处理,以避免此错误。