form组件

 

from组件

form组件的功能

  1. 生产input标签

  2. 对提交的数据可以进行校验

  3. 提供错误提示

定义form组件

from django import forms


class 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=True
min_length
max_length
2.自定义校验器
  1. 写函数

def checkname(value):
  # 通过校验规则 不做任何操作
  # 不通过校验规则   抛出异常
  if 'alex' in value:
      raise ValidationError('不符合社会主义核心价值观')

2.使用内置的校验器

from django.core.validators import RegexValidator
3.钩子函数:
  1. 局部钩子

    def clean_字段名(self):
      # 局部钩子
      # 通过校验规则 必须返回当前字段的值
      # 不通过校验规则   抛出异常
      raise ValidationError('不符合社会主义核心价值观')
  2. 全局钩子

    def clean(self):
      # 全局钩子
      # 通过校验规则 必须返回当前所有字段的值
      # 不通过校验规则   抛出异常   '__all__'
      pass

is_valid的流程:

1.执行full_clean()的方法:

定义错误字典

定义存放清洗数据的字典

2.执行_clean_fields方法:

循环所有的字段

获取当前的值

对进行校验 ( 内置校验规则 自定义校验器)

  1. 通过校验

    self.cleaned_data[name] = value

    如果有局部钩子,执行进行校验:

    通过校验——》 self.cleaned_data[name] = value

    不通过校验——》 self._errors 添加当前字段的错误 并且 self.cleaned_data中当前字段的值删除掉

    1. 没有通过校验

    self._errors 添加当前字段的错误

3.执行全局钩子clean方法

 

原文地址:https://www.cnblogs.com/anthony-wang0228/p/11103323.html