Django之form组件

1.sweetalert

https://sweetalert.js.org/guides/

  1. form组件

    1. form表单完成的事情
      1. 提供input可以提交数据
      2. 对提交的数据进行校验
      3. 提供错误提示
    2. 定义form组件
    from django import forms
    class RegForm(forms.Form):
    user = forms.CharField(label='用户名')
    pwd = forms.CharField(label='密码')
    1. 使用

    视图中:

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

2.字段和参数

  1. 常用的字段

​ CharField input

​ ChoiceField select框

MultipleChoiceField   多选框
  1. 字段的参数:

    required=True, 是否允许为空
    widget=None, HTML插件
    label=None, 用于生成Label标签或显示内容
    initial=None, 初始值

    error_messages=None, 错误信息 {'required': '不能为空', 'invalid': '格式错误'}
    validators=[], 自定义验证规则
    disabled=False, 是否可以编辑

3.校验:

  1. 内置校验

    ​ 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]
    1. from django.core.validators import RegexValidator
      validators=[RegexValidator(r'^1[3-9]d{9}$', '格式不正确')]

4.流程:

​ 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
  2. 全局钩子

定义一个放法 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/russellyoung/p/Django-zhiform-zu-jian.html