这是我的登录视图:
def sign_in(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
redirect('/')
else:
# Return a 'disabled account' error message
return render_to_response('message.html', {...})
else:
# Return an 'invalid login' error message.
???
else:
form = LoginForm()
return render(request, 'accounts/login.html', {
'form': form,
})
这是我的LoginForm类:
class LoginForm(forms.Form):
username = forms.CharField(required=True, max_length=30)
password = forms.CharField(required=True, widget=forms.PasswordInput(), max_length=128)
缺少的部分是# Return an 'invalid login' error message.
???
如何重新显示表单并显示错误消息,指出无效登录?
答案 0 :(得分:1)
替换???通过。在第三行创建的LoginForm对象包含错误。修改模板以显示错误。
答案 1 :(得分:1)
您可以定义错误消息并呈现相同的模板。您需要将错误消息传递给模板,以便它显示在某处。
这样的事情:
def sign_in(request):
error = None
if request.method == 'POST':
...
else:
# Return an 'invalid login' error message
error = "Invalid username/password."
#if you want to keep provided username, but clear password field
form = LoginForm(initial={'username': request.POST.get('username')})
...
return render(request, 'accounts/login.html', {
'form': form, 'error': error
})
更新模板以正确显示error
。
答案 2 :(得分:0)
要显示表单错误,您应该使用{{ form.name_of_field.errors }}
和{{ form.non_field_errors }}
。在您的情况下,您可以:
...
else:
# Return an 'invalid login' error message.
message = 'Your message'
return render(request, 'accounts/login.html', {
'form': form, 'message': message
})
您还可以使用:if request.method == 'POST':
form = LoginForm(request.POST or None)