form表单组件

1.sweetalert

组件地址

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 }} ——》 该字段的第一个的错误信息

字段和参数

  1. 常用的字段

    CharField   input

ChoiceField	select框
MultipleChoiceField	  多选框

     2. 字段的参数:

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,
  1. 自定义的校验(自定义校验器)

    1. 定义函数

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 经过校验的合格的数据

  1. 局部钩子

    定义一个放法 clean_字段名(self,)的方法,如果不通过校验规则,要抛出异常ValidationError,如果通过校验规则,返回通过校验的值

def clean_user(self):
    value = self.cleaned_data.get('user')
    if 'alex' in value:
        raise ValidationError('敏感词汇,不符合社会职业核心价值观')

    return value
  1. 全局钩子

定义一个放法 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

  

  

 

  

原文地址:https://www.cnblogs.com/xihuanniya/p/10111283.html