Django表单验证。不显示任何错误

Django表单验证。不显示任何错误,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

授权表格表格.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})
来自视图.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
的作用。