Django Forms的错误提示

1、error_messages={}

首先,在构建form表单时,可以用"error_messages={}"自定义错误信息,例如:

 # form.py
 from django import forms

 # Create your models here.
  class TestForm1(forms.Form):
      username = forms.CharField(
          min_length=3,
          max_length=20,
          error_messages={'required':'用户名不能为空', # 用户名为空时显示的错误信息
                         'min_length':'大于3个字符',
                         'max_length':'小于20个字符'}
         )  
view.py
def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')

     elif request.method == 'POST':
         obj = LoginForms(request.POST)
         if obj.is_valid():
           pass
       else:
            error = obj.errors
               return render(request, 'login.html', {'errors': error}) # 以字典的形式发送到前端显示出来

HTML上相对应的部分代码显示

<div class="form-group">
            <label for="username">用户名</label>
            <input type="text" class="form-control" name="username" id="username" placeholder="请输入用户名">
            <p style="color: red;">{{ errors.username.0 }}</p> {#“.0”的作用是在界面显示错误信息时,可以去掉前面的点"·"#}
</div>

2、invalid

我们知道,在定制表单信息的格式时,除了可以自定义外,Django内部给我们备好的,例如可以用Django内部帮我们定义好的slug

from django.core import validators 
 
class TextForm(forms.Form):
    # slug指有效URL的一部分,能使URL更加清晰易懂
    slug = forms.CharField(validators=[validators.validate_slug],
                           error_messages={'required':'不能为空'7                                          })

如果格式错误,则错误信息显示为Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens.

那么如何自定义错误信息,让它在格式错误时显示我们自己定义的内容呢?通过查看该函数源码,我们可以发现内定的格式错误信息是由"invalid"这个参数规定的

# https://docs.djangoproject.com/zh-hans/2.1/_modules/django/core/validators/#RegexValidator
slug_re = _lazy_re_compile(r'^[-a-zA-Z0-9_]+\Z')
validate_slug = RegexValidator(
    slug_re,
    # Translators: "letters" means latin letters: a-z and A-Z.
    _("Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."),
    'invalid'
)

那么,我们就可以在error_messages={}里写上

slug = forms.CharField(validators=[validators.validate_slug],
                           error_messages={'required':'不能为空',
                                          'invalid':'输入由字母,数字,下划线或连字符组成的有效“slug”'})

这样,当格式错误时,显示的错误信息就是我们自己自定义的

3、ValidationError

当填入在表单上的信息全部符合格式,但是还可能存在一种错误情况,例如注册用户时,用户名重复的情况,这时格式通过表单的信息验证,但是却不符合我们自己对于注册格式的定义时,怎么把错误信息显示出来??这就要用到“ValidationError”

 form.py

 from django.core.exceptions import ValidationError

 class LoginForms(BaseForm, forms.Form):
   username = forms.CharField()
     # 钩子函数
     def clean_username(self):
         username = self.request.POST.get('username')
         is_exsit = models.UserInfo.objects.filter(username=username) # 去数据库查找用户名是否已存在
         if is_exsit:
             raise ValidationError(message='用户名已存在', code='invalid')

原文链接

文章作者:  BigYoung
版权声明:  本网站所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 BigYoung !



z