1.sweetalert
https://sweetalert.js.org/guides/
form组件
- form表单完成的事情
- 提供input可以提交数据
- 对提交的数据进行校验
- 提供错误提示
- 定义form组件
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 }} ——》 该字段的第一个的错误信息- form表单完成的事情
2.字段和参数
- 常用的字段
CharField input
ChoiceField select框
MultipleChoiceField 多选框
字段的参数:
required=True, 是否允许为空
widget=None, HTML插件
label=None, 用于生成Label标签或显示内容
initial=None, 初始值
error_messages=None, 错误信息 {'required': '不能为空', 'invalid': '格式错误'}
validators=[], 自定义验证规则
disabled=False, 是否可以编辑
3.校验:
内置校验
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}$', '格式不正确')]
4.流程:
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