两者都是定义个form.py脚本文件,然后在views.py中导入到对应的视图函数中
Flask的表单类
from flask_wtf import FlaskForm
Flask表单类写在自定义的form.py文件中,然后再views.py文件中导入该form.py文件,将该文件中的各种表单类加入到对应的视图函数中,然后render_template(xx.html,form=form)渲染html页面时候当作form关键字传入
class LoginForm1(FlaskForm): # 登录表单
name = StringField('name',validators=[DataRequired()])
# StringField第二个参数可以不加关键字传入
password = StringField('password',[DataRequired()])
使用场景
Django的表单类
from django import forms
class VocationForm(forms.Form): # form.Form的字段和models中的字段类似
job = forms.CharField(max_length=20, label='职位')
# 设置字段参数widget、error_messages
# 参数widwget必须是个forms.widgets对象,而widwget的对象必须和表单字段类型相互对应,对应该则分为4大类,该定义的函数中可以传入css样式的class,id等属性
title = forms.CharField(max_length=20, label='职称', #下面这句话啥意思
# 以修饰的css样式为先,但它这里还能更改html表单的类型,TextInput表述文本框,若是charfield显示下拉框,优先使用文本框
widget=forms.widgets.TextInput(attrs={'class': 'c1'}), # 设置表单的css样式,TextInput表示文本输入框,要和charfield输入样式相同
error_messages={'required': '职称不能为空'},) # 设置验证失败后的参数信息,字典的键为表单的参数名称,字典的值为错误信息
# 设置字段参数validators;validators参数一定要列表形式么;该参数是自定义验证函数
payment = forms.IntegerField(label='薪资',validators=[payment_validate]) # IntegerField字段还可以添加额外验证函数
# 设置下拉框的值
# 查询模型PersonInfo的数据
value = PersonInfo.objects.values('name')
# 将数据以为列表格式表示,列表元素为元组格式
choices = [(i+1, v['name']) for i, v in enumerate(value)] # enumerate()生成(索引,值)的列表
# 表单字段设为ChoiceField类型,用生成下拉框
person = forms.ChoiceField(choices=choices, label='姓名')
# 自定义表单字段title的数据清洗(修改该字段的返回值)
# 最好函数名要与获取的表单字段名一样,方便阅读
def clean_job(self): # 函数应该是自定义的,并不是,返回值的话会返回给该字段
# 获取字段title的值
# 类可以调用方法中的属性,是由于有self么
# 提取的是表单字段的属性
data = self.cleaned_data['job'] # cleaned_data是默认的属性
return '初级' + data # 通过views.py返回给终端
上方的是普通表单类,需要注意字段类型与数据库模型进行转换
下方的是模型表单
class VocationForm(forms.ModelForm):
# 添加模型外的表单字段;在模型已有的字段下再添加字段;添加的html位置在表单最下方
LEVEL = (('L1', '初级'),
('L2', '中级'),
('L3', '高级'),)
level = forms.ChoiceField(choices=LEVEL, label='级别') # 看来choices的前缀L1,L2之类的就是索引
# 模型与表单设置
class Meta:
# 绑定模型
model = Vocation
# 以下属性都是函数modelform_factory的属性
# fields属性用于设置转换字段,'__all__'是将全部模型字段转换成表单字段
# fields = '__all__'
# fields = ['job', 'title', 'payment', 'person']
# exclude用于禁止模型字段转换表单字段
exclude = []
# labels设置HTML元素控件的label标签
labels = {
'job': '职位',
'title': '职称',
'payment': '薪资',
'person': '姓名'
}
# 定义widgets,设置表单字段的CSS样式
widgets = {
'job': forms.widgets.TextInput(attrs={'class': 'c1'}),
}
# 重新定义字段类型
# 一般情况下模型字段会自动转换成表单字段
field_classes = {
'job': forms.CharField
}
# 帮助提示信息
help_texts = {
'job': '请输入职位名称'
}
# 自定义错误信息
error_messages = {
# __all__设置全部错误信息
'__all__': {'required': '请输入内容',
'invalid': '请检查输入内容'},
# 设置某个字段的错误信息
'title': {'required': '请输入职称',
'invalid': '请检查职称是否正确'}
}
# 自定义表单字段payment的数据清洗
def clean_payment(self):
# 获取字段payment的值
data = self.cleaned_data['payment'] + 1
return data