要求:
1. 输入错误时需要保留某个input框中的数据
保留上次输入的内容
2. 数据检查
检查要求示例:
2.1.1 不能为空
2.1.2 长度要求 (5-18)
2.1.3 必须邮箱格式
2.1.4 ...
2.2 提交方式:
2.2.1 Form提交(刷新,失去上次内容)
2.2.2 Ajax提交(默认不刷新,上次内容自动保留)
form组件工作流程:
- 获取当前类中的所有字段,匹配类实例化的时候会把字段放在self.fields中,是一个字典
- 循环self.fields
- 从POST中拿到的数据进行匹配
Django提供了Form的组件:
1.定义规则
from django.forms import Form, fields
# 导入form组件包,fields就是大量的正则表达式。
- 示例
class LoginForm(Form):
# 正则验证
username = fields.CharField(max_length=18,min_length=6,required=True)
# 长度6-18
password = fields.CharField(min_length=16,required=True)
# required=True检查是否为空,最小长度16
# fields就是大量的正则表达式,CharField()必须是字符串。字符串格式。
number = fields.IntegerField(min_value=10,max_value=1000,error_messages={
'required':'不能为空',
'invalid':'必须是数字,格式错误',
'min_value':最小长度为10,
'max_value':最大长度为1000,
})
# 整数格式。
emali = fields.EmailField(error_messages={
'required':'不能为空',
'invalid':'必须是邮箱,格式错误',
})
url = fields.URLField()
# url格式
slug = fields.SlugField()
# 语义化url
ip = fields.GenericIPAddressField()
# ip地址
time = fields.DateField()
# 格式:2020-3-21
times = fields.DateTimeField()
# 格式:2020-3-21 22:13
timess = fields.TimeField()
# 22:13
raw = fields.RegexField(r'^139\d+$',error_messages={
'invalid':'格式错误'
})
# 自定义的正则表达式
def login(request):
if request.method == 'GET':
return render(request,'login.html')
else:
obj = LoginForm(request.POST)
if obj.is_valid():
print(obj.clean_data)
return redirect('http://www.bing.com')
else:
print(obj.errors)
return render(request,'login.html',{'obj':obj})
'''
类(Form):
字段名 = xxx.xxField()
#本质验证规则,正则表达式
obj = LoginFrom(用户提交的数据)
obj = LoginFrom(request.post)
'''
常用字段:
fields.CharField()
字符串格式
fields.IntegerField()
整数格式
fields.EmailField()
邮箱格式
fields.URLField()
url格式
fields.SlugField()
slug格式
slug本质上存放字符串,构建语义化的url
fields.GenericIPAddressField()
IP地址格式
fields.DateField()
时间格式 2020-3-21
fields.EmailField()
时间格式 2020-3-21 22:13
fields.EmailField()
时间格式 22:13
fields.RegexField
自定义正则表达式
常用参数:
required = True
# 不能为空,默认添加
max_length = 3
# 最大长度
min_length = 3
# 最小长度
error_messages={
'required' : '请填写数据',
'max_length' : '请不要超过最大长度',
'invalid': '格式错误,必须是数字',
}
# 自定义错误
# 涉及到格式错误就是invalid
max_value=1000
min_value=10
# 数字格式用,最大长度和最小长度
总结:
1. 大多数格式继承了CharField,少量格式继承IntegerField,无论是CharField还是IntegerField都继承了fields,都可以调用fields里的方法。
2. form类中的字段必须与html提交数据的name相同对应。