钩子函数和forms组件

本文详细介绍了Django Forms的钩子函数,包括局部和全局钩子在数据校验中的应用,如校验用户名唯一性和密码一致性。同时探讨了forms组件的字段参数,如正则匹配、widget渲染及choices的使用。还深入源码分析了forms组件的验证过程,并提到了ModelForm的概念,它是如何简化models类和forms类的重复编写。
摘要由CSDN通过智能技术生成

目录

forms钩子函数

局部钩子

全局钩子

forms组件字段参数

正则匹配的使用

widget渲染标签

choices使用

forms组件字段类型

forms组件源码分析

 补充

ModelForm简介


forms钩子函数


钩子函数的含义其实就是在程序的执行过程中穿插额外的逻辑

校验用户名是否已存在
钩子函数之局部钩子(校验单个字段)

校验密码和确认密码是否一致
钩子函数之全局钩子(校验多个字段)

‘’‘钩子函数是数据经过了第一层校验,即通过了字段设置的校验之后才会执行’‘

from django import forms
class Froms(forms.Form):
username = forms.CharField(max_length=32) # 最大长度32
password = forms.CharField(min_length=8) # 密码最短八位
password_again = forms.CharField(min_length=8) # 密码最短八位

局部钩子

校验用户名是否已经存在(一次只能勾一个人)

def clean_username(self):
    # 获取用户名
    username = self.cleaned_data.get('username')
    #判断用户名是否已存在
    user_obj = models.User.objects.all()
    if user_obj;
    # 设置提示信息
        self.add_error('username','用户名已存在')
        # 返回用户名
     return username

全局钩子

校验密码与确认密码是否一致, (一次可以勾多人)

def clean(self):
    # 获取数据
    password = self.cleaned_data.get('password'0
    password_again = self.cleaned_data.get('password_again')
    # 判断两次输入密码是否相同
    if password != password_again:
    # 设置提示信息
        self.add_error('password_again','两次密码不一致')
        # 返回整个数据
    return self.cleaned_data

forms组件字段参数

参数 作用

min_length

最小长度
max_length 最大长度
label 字段名称
error_messages 错误提示
min_value 最小值
max_value 最大值
initial 默认值
validators 正则校验器
widget 控制渲染出来的标签各项属性
choices 选择类型的标签内部对应关系

正则匹配的使用

	# 先导入正则模块
    from django.core.validators import RegexValidator
      phone = forms.CharField(
            validators=[
                        RegexValidator(r'^[0-9]+$', '请输入数字'),
                        RegexValidator(r'^159[0-9]+$', '数字必须以159开头')],
        )  # validators里面写正则表达式

widget渲染标签

password = CharField(widget=forms.widgets.PasswordInput(attrs={'class':'form-control'})  # type=’password,class='form-control'
	'''
	语法模板:
	forms.widgets.控制type的类型(attrs=控制各项属性:class id ...)
	'''   

choices使用

hobby = forms.MultipleChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "排球")),
    )
    ```
### 数据库拿数据
```python
def __init__(self, *args, **kwargs):
        super(MyForm,self).__init__(*args, **kwargs)
        self.fields['hobby'].choices = models.Classes.objects.all().values_list('id','caption')

forms组件字段类型

字段类型 功能
CharField 字符串框
PasswordInput 密码框
CheckboxInput 单选框
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值