form组件

Posted anthony-wang0228

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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方法

 

以上是关于form组件的主要内容,如果未能解决你的问题,请参考以下文章

form组件

Django之Form组件

ModelForm组件和forms组件补充

Django组件-forms组件

17 Django Form组件

组件分享之前端组件——用于自定义表单的前端组件form-create