from组件
form组件的功能
- 
生产input标签
 - 
对提交的数据可以进行校验
 - 
提供错误提示
 
定义form组件
from django import formsclass RegForm(forms.Form): username = forms.CharField() pwd = forms.CharField()
使用
视图
form_obj = RegForm()form_obj = RegForm(request.POST)form_obj.is_valid():  # 对数据进行校验print(form_obj.cleaned_data)  # 通过校验的数据return render(request, 'reg2.html', {'form_obj': form_obj})
模板
{{ form_obj.as_p }}    __>   生产一个个P标签  input  label{{ form_obj.errors }}    ——》   form表单中所有字段的错误{{ form_obj.username }}     ——》 一个字段对应的input框{{ form_obj.username.label }}    ——》  该字段的中午提示{{ form_obj.username.id_for_label }}    ——》 该字段input框的id{{ form_obj.username.errors }}   ——》 该字段的所有的错误{{ form_obj.username.errors.0 }}   ——》 该字段的第一个错误的错误
常用字段
CharField ChoiceField MultipleChoiceField
字段参数
required=True,               是否允许为空widget=None,                 HTML插件label=None,                  用于生成Label标签或显示内容initial=None,                初始值error_messages=None,         错误信息 {'required': '不能为空', 'invalid': '格式错误'}validators=[],               自定义验证规则disabled=False,              是否可以编辑
验证
1.内置校验
required=Truemin_lengthmax_length
2.自定义校验器
- 
写函数
 
def checkname(value):    # 通过校验规则 不做任何操作    # 不通过校验规则   抛出异常    if 'alex' in value:        raise ValidationError('不符合社会主义核心价值观')
2.使用内置的校验器
from django.core.validators import RegexValidator
3.钩子函数:
- 
局部钩子
def clean_字段名(self): # 局部钩子 # 通过校验规则 必须返回当前字段的值 # 不通过校验规则 抛出异常 raise ValidationError('不符合社会主义核心价值观') - 
全局钩子
def clean(self): # 全局钩子 # 通过校验规则 必须返回当前所有字段的值 # 不通过校验规则 抛出异常 '__all__' pass
 
is_valid的流程:
1.执行full_clean()的方法:
定义错误字典
定义存放清洗数据的字典
2.执行_clean_fields方法:
循环所有的字段
获取当前的值
对进行校验 ( 内置校验规则 自定义校验器)
- 
通过校验
self.cleaned_data[name] = value
如果有局部钩子,执行进行校验:
通过校验——》 self.cleaned_data[name] = value
不通过校验——》 self._errors 添加当前字段的错误 并且 self.cleaned_data中当前字段的值删除掉
- 
没有通过校验
 
self._errors 添加当前字段的错误
 - 
 
3.执行全局钩子clean方法
来源:https://www.cnblogs.com/anthony-wang0228/p/11103323.html