如何在Django登录表单中创建自定义错误消息?

时间:2019-02-08 16:41:04

标签: django

我正在为Django应用创建登录页面。目前,如果我输入了错误的用户名或密码,则会显示以下错误消息:

error

有没有一种方法可以自定义此消息,以消除“ ___all____”和项目符号要点?也许只是说“请输入正确的用户名和密码。请注意,两个字段都区分大小写。”?

下面是我的代码的简化版本:

views.py:

from django.contrib.auth import authenticate,login,logout

html:

<div class="form_container">
    <form class="log_in_form" action="{% url 'inventory_management_app:login' %}" method="post">
    <p>
    {% csrf_token %}

    {{ form.username }}
    </p>

    <br><br>

    <p>
    {{ form.password }}

    <br>

    {{ form.errors }}
    </p>
    <p>

    <br><br>

  <input id="search-button" class="btn btn-dark" type="submit" value="Login">
  </form>
  </p>
  </div>

forms.py:

from django import forms
from django.contrib.auth.forms import AuthenticationForm
from django.forms.widgets import PasswordInput, TextInput


class CustomAuthForm(AuthenticationForm):
    username = forms.CharField(widget=TextInput(attrs={'class':'validate','placeholder': 'Email'}))
    password = forms.CharField(widget=PasswordInput(attrs={'placeholder':'Password'}))

urls.py

url(r'^login/$', auth_views.login, name='login', kwargs={"authentication_form":CustomAuthForm}),

编辑:根据marxin的回答,我可以创建自定义消息。但是,我的消息仍然显示为项目符号,下面是屏幕截图: enter image description here

3 个答案:

答案 0 :(得分:2)

更改表单类中的invalid_login错误消息。

class CustomAuthForm(AuthenticationForm):
    def __init__(self, *args, **kwargs):
        self.error_messages['invalid_login'] = 'Custom error'
        super().__init__(*args, **kwargs)

答案 1 :(得分:0)

答案 2 :(得分:0)

实施marxins答案后,从自定义消息中删除项目符号点仍然很困难。我发现只需更改模板以包含以下代码,就可以自定义错误消息,而无需更改Forms.py中的任何内容。我的其余代码与问题中给出的代码相同,但是我添加了以下内容:

{% if form.errors %}
    <p>my custom error message</p>
{% endif %}

所以现在我的HTML看起来像这样:

<form class="log_in_form" action="{% url 'inventory_management_app:login' %}" method="post">
  <p>

  {% csrf_token %}

  {{ form.username }}
  </p>

  <br>

  <p>
  {{ form.password }}
  <br>
  <p>
  </p>
  <br>

  {% if form.errors %}
      <p>username or password not correct</p>
  {% endif %}

  </p>
  <p>
  <br><br>
  <input id="search-button" class="btn btn-dark" type="submit" value="Login">
  </form>