Django表单验证。不显示任何错误
授权表格表格.pyDjango表单验证。不显示任何错误,django,django-forms,Django,Django Forms,授权表格表格.py class LoginForm(forms.Form): username = forms.CharField(label='Enter your login') password = forms.CharField(label='Enter your password', widget=forms.PasswordInput) def clean(self): cleaned_data = super(LoginFo
class LoginForm(forms.Form):
username = forms.CharField(label='Enter your login')
password = forms.CharField(label='Enter your password', widget=forms.PasswordInput)
def clean(self):
cleaned_data = super(LoginForm, self).clean()
username = self.cleaned_data['username']
password = self.cleaned_data['password']
if not User.objects.filter(username=username).exists():
raise forms.ValidationError('User with such login is not registered!')
user = User.objects.get(username=username)
if user and not user.check_password(password):
raise forms.ValidationError('Incorrect password!')
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
login_user = authenticate(username=username, password=password)
if login_user:
login(request, login_user)
return redirect('/')
else:
form = LoginForm()
return render(request, 'registration/login_view.html', {'form': form})
来自视图.py的代码
class LoginForm(forms.Form):
username = forms.CharField(label='Enter your login')
password = forms.CharField(label='Enter your password', widget=forms.PasswordInput)
def clean(self):
cleaned_data = super(LoginForm, self).clean()
username = self.cleaned_data['username']
password = self.cleaned_data['password']
if not User.objects.filter(username=username).exists():
raise forms.ValidationError('User with such login is not registered!')
user = User.objects.get(username=username)
if user and not user.check_password(password):
raise forms.ValidationError('Incorrect password!')
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
login_user = authenticate(username=username, password=password)
if login_user:
login(request, login_user)
return redirect('/')
else:
form = LoginForm()
return render(request, 'registration/login_view.html', {'form': form})
login\u view.html
{% extends 'base.html' %}
{% block content %}
<div class="title">Вход</div>
<section id="login" class="border">
<form id="login-form" action="" method="POST">
{% csrf_token %}
{% for field in form %}
{{ field.errors }}
<ul>
<li>{{ field.label }} *</li>
<li>
<input class="input" name="{{ field.name }}" type="{{ field.name }}" /> </li>
</ul>
{% endfor %}
<div>
<span><input class="block" type="submit" value="Войти" /></span>
</div>
</form>
</section>
{% endblock content %}
{%extends'base.html%}
{%block content%}
Вход
{%csrf_令牌%}
{%形式的字段为%}
{{field.errors}}
- {{field.label}*
-
{%endfor%}
{%endblock内容%}
表单不会显示验证错误,只会重置所有字段。我在代码中找不到问题。。。这里可能有什么问题 我被要求解决我的问题 在我的例子中,错误绑定到表单,而不是特定的字段 需要在每个周期内移动{field.errors},并更改为{{form.non_field_errors}}
{% extends 'base.html' %}
{% block content %}
<div class="title">Вход</div>
<section id="login" class="border">
<form id="login-form" action="" method="POST">
{% csrf_token %}
{{ form.non_field_errors }}
{% for field in form %}
<ul>
<li>{{ field.label }} *</li>
<li>
<input class="input" name="{{ field.name }}" type="{{ field.name }}" /> </li>
</ul>
{% endfor %}
<div>
<span><input class="block" type="submit" value="Войти" /></span>
</div>
</form>
</section>
{% endblock content %}
{%extends'base.html%}
{%block content%}
Вход
{%csrf_令牌%}
{{form.non_field_errors}}
{%形式的字段为%}
- {{field.label}*
-
{%endfor%}
{%endblock内容%}
我看不出上述代码有任何问题。注意,您不应该在form clean方法中自己检查用户或密码。这就是authenticate
的作用。