• Django Forms的错误提示


    1、error_messages={}

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

     # form.py
    1
    from django import forms 2 3 # Create your models here. 4 class TestForm1(forms.Form): 5 username = forms.CharField( 6 min_length=3, 7 max_length=20, 8 error_messages={'required':'用户名不能为空', # 用户名为空时显示的错误信息 10 'min_length':'大于3个字符', 11 'max_length':'小于20个字符'} 12 )
    view.py
    1 def login(request):
    2     if request.method == 'GET':
    3         return render(request, 'login.html')
    4 
    5     elif request.method == 'POST':
    8         obj = LoginForms(request.POST)
    9         if obj.is_valid():
    10           pass
    11       else:
    12            error = obj.errors
    13               return render(request, 'login.html', {'errors': error}) # 以字典的形式发送到前端显示出来

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

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

    2、invalid

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

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

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

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

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

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

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

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


    3、ValidationError

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

     1 form.py
     2 
     3 from django.core.exceptions import ValidationError
     4 
     5 class LoginForms(BaseForm, forms.Form):
     6   username = forms.CharField()
     7     # 钩子函数
     8     def clean_username(self):
     9         username = self.request.POST.get('username')
    10         is_exsit = models.UserInfo.objects.filter(username=username) # 去数据库查找用户名是否已存在
    11         if is_exsit:
    12             raise ValidationError(message='用户名已存在', code='invalid')
  • 相关阅读:
    RocketMQ源码分析:(二)消息发送的三种方式
    LTS本地搭建详述
    Mac端解决(含修改8.0.13版的密码):Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    flink入门:01 构建简单运行程序
    rocketmq控制台搭建(rocketmq-console)
    在consul上注册web服务
    将filenames里的每个字符串输出到out文件对象中注意行首的缩进
    spidermark sensepostdata ntp_monlist.py
    HTTP Error 403没有了,但是中文全都是乱码。又是怎么回事?
    original.txt和提交的页面输出的文字的混合文件
  • 原文地址:https://www.cnblogs.com/linyuhong/p/9487525.html
Copyright © 2020-2023  润新知