目录
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 | 单选框 |