小金鱼呀 python-django-初识Form组件(Form类)
Django内置字段:
Field
required
=
True
, 是否允许为空
widget
=
None
, HTML插件
label
=
None
, 用于生成Label标签或显示内容
initial
=
None
, 初始值
help_text
=
'', 帮助信息(在标签旁边显示)
error_messages
=
None
, 错误信息 {
'required'
:
'不能为空'
,
'invalid'
:
'格式错误'
}
show_hidden_initial
=
False
, 是否在当前插件后面再加一个隐藏的且具有默认值的插件(可用于检验两次输入是否一直)
validators
=
[], 自定义验证规则
localize
=
False
, 是否支持本地化
disabled
=
False
, 是否可以编辑
label_suffix
=
None
Label内容后缀
CharField(Field)
max_length
=
None
, 最大长度
min_length
=
None
, 最小长度
strip
=
True
是否移除用户输入空白
1 user = fields.CharField(
2 required=True, # 是否必填
3 max_length=12, # 最大长度
4 min_length=3, # 最小长度
5 error_messages={}, # 错误提示
6 #widget = widgets.Select(), # 定制HTML插件
7 label='用户名',
8 initial='请输入用户',
9 help_text='asdfasdf',
10 show_hidden_initial=False,
11 # validators=[]
12 disabled=True,
13 label_suffix='->'
14 )
IntegerField(Field)
max_value
=
None
, 最大值
min_value
=
None
, 最小值
FloatField(IntegerField)
...
DecimalField(IntegerField) 小数
max_value
=
None
, 最大值
min_value
=
None
, 最小值
max_digits
=
None
, 总长度
decimal_places
=
None
, 小数位长度
BaseTemporalField(Field)
input_formats
=
None
时间格式化
DateField(BaseTemporalField) 格式:
2015
-
09
-
01
TimeField(BaseTemporalField) 格式:
11
:
12
DateTimeField(BaseTemporalField)格式:
2015
-
09
-
01
11
:
12
DurationField(Field) 时间间隔:
%
d
%
H:
%
M:
%
S.
%
f
...
RegexField(CharField)
regex, 自定制正则表达式
max_length
=
None
, 最大长度
min_length
=
None
, 最小长度
error_message
=
None
, 忽略,错误信息使用 error_messages
=
{
'invalid'
:
'...'
}
EmailField(CharField)
...
1 img = fields.FileField()
FileField(Field)
allow_empty_file
=
False
是否允许空文件
ImageField(FileField)
...
注:需要PIL模块,pip3 install Pillow
以上两个字典使用时,需要注意两点:
-
form表单中 enctype
=
"multipart/form-data"
-
view函数中 obj
=
MyForm(request.POST, request.FILES)
URLField(Field)
...
BooleanField(Field)
...
NullBooleanField(BooleanField)
...
ChoiceField(Field) 单选
...
choices
=
(), 选项,如:choices
=
((
0
,
'上海'
),(
1
,
'北京'
),)
required
=
True
, 是否必填
widget
=
None
, 插件,默认select插件
label
=
None
, Label内容
initial
=
None
, 初始值
help_text
=
'', 帮助提示
1 city = fields.ChoiceField(
2
3 choices=[(1,'上海',),(2,'北京'),(3,'沙河'),],
4 initial=2
5 )
ModelChoiceField(ChoiceField)
... django.forms.models.ModelChoiceField
queryset,
# 查询数据库中的数据
empty_label
=
"---------"
,
# 默认空显示内容
to_field_name
=
None
,
# HTML中value的值对应的字段
limit_choices_to
=
None
# ModelForm中对queryset二次筛选
ModelMultipleChoiceField(ModelChoiceField)
... django.forms.models.ModelMultipleChoiceField
TypedChoiceField(ChoiceField) 对数据进行类型转换
coerce
=
lambda
val: val 对选中的值进行一次转换
empty_value
=
'' 空值的默认值
1 city = fields.TypedChoiceField(
2 coerce=lambda x: int(x), #转换为int类型
3 choices=[(1,'上海',),(2,'北京'),(3,'沙河'),],
4 initial=2
5 )
MultipleChoiceField(ChoiceField) 多选
...
1 bobby = fields.MultipleChoiceField(
2 choices=[(1,'刚娘'),(2,'铁娘'),(3,'钢弹')],
3 initial=[1,2]
4 )
TypedMultipleChoiceField(MultipleChoiceField)
coerce
=
lambda
val: val 对选中的每一个值进行一次转换
empty_value
=
'' 空值的默认值
ComboField(Field) 使用多个验证
fields
=
() 使用多个验证,如下:即验证最大长度
20
,又验证邮箱格式
fields.ComboField(fields
=
[fields.CharField(max_length
=
20
), fields.EmailField(),])
MultiValueField(Field)
PS: 抽象类,子类中可以实现聚合多个字典去匹配一个值,要配合MultiWidget使用
SplitDateTimeField(MultiValueField)
input_date_formats
=
None
, 格式列表:[
'%Y--%m--%d'
,
'%m%d/%Y'
,
'%m/%d/%y'
]
input_time_formats
=
None
格式列表:[
'%H:%M:%S'
,
'%H:%M:%S.%f'
,
'%H:%M'
]
FilePathField(ChoiceField) 文件选项,目录下文件显示在页面中
path, 文件夹路径
match
=
None
, 正则匹配
recursive
=
False
, 递归下面的文件夹
allow_files
=
True
, 允许文件
allow_folders
=
False
, 允许文件夹
required
=
True
,
widget
=
None
,
label
=
None
,
initial
=
None
,
help_text
=
''
GenericIPAddressField
protocol
=
'both'
, both,ipv4,ipv6支持的IP格式
unpack_ipv4
=
False
解析ipv4地址,如果是::ffff:
192.0
.
2.1
时候,可解析为
192.0
.
2.1
, PS:protocol必须为both才能启用
SlugField(CharField) 数字,字母,下划线,减号(连字符)
...
UUIDField(CharField) uuid类型
...