一 form
1. form的作用
1. 生成HTML代码
2. 帮我们做数据有效性的校验
3. 保留上次输入内容,显示错误提示
2. form组件校验数据有效性
1. 内置的校验规则
1. require=True 该字段必填
2. max_length 该字段的最大长度
3. min_length 该字段的最小长度
2. 自定义校验规则
1. 如手机号的格式 利用内置的正则校验器
from django.core.validators import RegexValidator
validators=[RegexValidator(r'^1[356789]\d{9}$', "手机号码格式不正确")],
3. 使用钩子函数做校验
1. 局部钩子(hook)
在form类内部定义一个 clean_字段名() 方法
例子
#自定义一个局部钩子函数含有alex的关键字不能提交 def clean_title(self): value=self.cleaned_data.get("title") #获取书名 if "alex" in value: raise ValidationError("ALEX以备和谐") else: return value
2. 全局钩子
在form类内部定义一个 clean() 方法
4. form组合如何给html标签设置默认值
实例:关于使用form的例子,使用form之前可以自己写一个单独的form类,我这里一添加book为例:
1 form.py
1 from django import forms 2 from app01 import models 3 from django.core.exceptions import ValidationError #注册功能 4 from django.core.validators import RegexValidator # 检验手机号码是否正确 5 6 # 自己定义一个form类 7 class BookForm(forms.Form): 8 title=forms.CharField( 9 max_length=12, 10 min_length=2, 11 # 如果想让网页显示中文就加上label 12 label="书名", 13 initial="填写书名", 14 # 给tttle生成的input标签加上一个class类 15 widget=forms.widgets.TextInput(attrs={"class":"form-control"}) 16 ) 17 publisher_date=forms.DateField( 18 label="出版日期", 19 # widget 插件 20 widget=forms.widgets.DateInput(attrs={"type":"date","class":"form-control"}) 21 ) 22 phone=forms.CharField( 23 max_length=11, 24 validators=[RegexValidator(r'^1[356789]\d{9}$',"手机号码格式不正确")], # 限制手机号格式 25 widget = forms.widgets.TextInput(attrs={"class": "form-control"}) 26 ) 27 # 用modelchoicefield可以实时显示到页面上面当数据库增加的时候 28 publisher = forms.ModelChoiceField( 29 queryset=models.Publisher.objects.all(), 30 widget=forms.widgets.Select(attrs={"class": "form-control"}), 31 ) 32 authors=forms.ModelMultipleChoiceField( 33 queryset=models.Author.objects.all(), 34 widget=forms.widgets.SelectMultiple(attrs={"class": "form-control"}) 35 ) 36 #自定义一个局部钩子函数含有alex的关键字不能提交 37 def clean_title(self): 38 value=self.cleaned_data.get("title") #获取书名 39 if "alex" in value: 40 raise ValidationError("ALEX以备和谐") 41 else: 42 return value