1.sweetalert
from django import forms class RegForm(forms.Form): user = forms.CharField(label='用户名') pwd = forms.CharField(label='密码')
视图中:
form_obj = RegForm() # 实例化form对象 return render(request, 'reg2.html', {'form_obj': form_obj})
form 标签加上novalidate 前端不进行校验
{{ form_obj.as_p }} ——》 生成所有的p标签 label input {{ form_obj.errors }} ——》所有字段的错误 {{ form_obj.user }} ——》 该字段的input框 {{ form_obj.user.label }} ——》 该字段的label 中文提示 {{ form_obj.user.id_for_label }} ——》 该字段的id {{ form_obj.user.errors }} ——》 该字段的所有的错误信息 {{ form_obj.user.errors.0 }} ——》 该字段的第一个的错误信息
-
常用的字段
CharField input
ChoiceField select框 MultipleChoiceField 多选框
2. 字段的参数:
required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial=None, 初始值 error_messages=None, 错误信息 {'required': '不能为空', 'invalid': '格式错误'} validators=[], 自定义验证规则 disabled=False, 是否可以编辑
required=True,min_length=8,max_length=12,
-
自定义的校验(自定义校验器)
-
定义函数
-
from django.core.exceptions import ValidationError def check(value): if 'alex' in value: raise ValidationError('敏感词汇,不符合社会职业核心价值观') validators=[check]
from django.core.validators import RegexValidator validators=[RegexValidator(r'^1[3-9]d{9}$', '格式不正确')]
form_obj.is_valid() 是否通过校验
form_obj.cleaned_data 经过校验的合格的数据
-
局部钩子
定义一个放法 clean_字段名(self,)的方法,如果不通过校验规则,要抛出异常ValidationError,如果通过校验规则,返回通过校验的值
def clean_user(self): value = self.cleaned_data.get('user') if 'alex' in value: raise ValidationError('敏感词汇,不符合社会职业核心价值观') return value
定义一个放法 clean(self)的方法,如果不通过校验规则,要抛出异常ValidationError,还可以自己使用self.add_error('re_pwd', '两次密码不一致!!@!')添加错误信息。如果通过校验规则,返回所有通过校验的值
def clean(self): pwd = self.cleaned_data.get('pwd') re_pwd = self.cleaned_data.get('re_pwd') if pwd != re_pwd: self.add_error('re_pwd', '两次密码不一致!!@!') raise ValidationError('两次密码不一致') return self.cleaned_data