以下是我在做实战时遇到的问题,两个类因为标红的语句的写法不一致而导致form.validate_on_submit()=False,以致于数据库操作没有执行。引以为戒。
此外,当出现这种情况的时候建议debug。
除此之外,还有别的情况:
1.忘了在表单中加入{{ form.csrf_token }}, 导致validate_on_submit验证不通过。
也有可能是flask官网更新了csrf_token的用法,详情见flask官网:https://flask.palletsprojects.com/en/1.1.x/

2.表单里StringField和PasswordField没有validators,如果表单里没有写validators的话,相当于提交的表单内容是空,后端的form.validate_on_submit()就会一直是false。或者是有validators,但是没有写DataRequired。

class MovieForm(FlaskForm):
title = StringField(
label='片名',
validators=[
DataRequired('请输入片名!')
],
description='片名',
render_kw={
'class': "form-control",
'placeholder': "请输入标签名称!"
}
)
url = FileField(
label='电影文件',
validators=[
DataRequired('请上传电影文件!')
],
description='电影文件',
)
info = TextAreaField(
label='简介',
validators=[
DataRequired('请输入简介!')
],
description='简介',
render_kw={
'class': "form-control",
'rows': "10",
}
)
logo = FileField(
label='封面',
validators=[
DataRequired('请上传封面!')
],
description='封面',
)
star = SelectField(
label='星级',
validators=[
DataRequired('请选择星级!')
],
description='星级',
coerce=int,
choices=[(1, '1星'), (2, '2星'), (3, '3星'), (4, '4星'), (5, '5星')],
render_kw={
'class': "form-control"
}
)
tag_id = SelectField(
label='标签',
validators=[
DataRequired('请选择标签!')
],
coerce=int,
# choices=[(tag.id, tag.name) for tag in Tag.query.all()],
description='标签',
render_kw={
'class': "form-control"
}
)
def __init__(self, *args, **kwargs):
super(MovieForm, self).__init__(*args, **kwargs)
self.tag_id.choices = [(v.id, v.name) for v in Tag.query.all()]
area = StringField(
label='上映地区',
validators=[
DataRequired('请输入上映地区!')
],
description='上映地区',
render_kw={
'class': "form-control",
'placeholder': "请输入上映地区!"
}
)
length = StringField(
label='播放时长(分钟)',
validators=[
DataRequired('请输入播放时长!')
],
description='播放时长',
render_kw={
'class': "form-control",
'placeholder': "请输入播放时长!",
}
)
release_time = StringField(
label='上映时间',
validators=[
DataRequired('请选择上映时间!')
],
description='上映时间',
render_kw={
'class': "form-control",
'placeholder': "请选择上映时间!",
'id': "input_release_time" # 由于使用了时间控件,需要指定id
}
)
submit = SubmitField(
label='提交',
render_kw={
'class': "btn btn-primary"
}
)
class MovieForm1(FlaskForm):
title = StringField(
label="片名",
validators=[
DataRequired("请输入片名!")
],
description="片名",
render_kw={
"class": "form-control",
"placeholder": "请输入片名!"
}
)
name = StringField(
label="名称",
validators=[
DataRequired("请输入标签!")
],
description="标签",
render_kw={
"class": "form-control",
"id": "input_name",
"placeholder": "请输入标签名称!"
}
)
url = FileField(
label="文件",
validators=[
DataRequired("请上传文件!")
],
description="文件",
)
info = TextAreaField(
label="简介",
validators=[
DataRequired("请输入简介!")
],
description="简介",
render_kw={
"class": "form-control",
"row": "10"
}
)
logo = FileField(
label="封面",
validators=[
DataRequired("请上传封面!")
],
description="封面",
)
star = SelectField(
label="星级",
validators=[
DataRequired("请选择星级!")
],
coerce=int,
choices=[(1, "1星"), (2, "2星"), (3, "3星"), (4, "4星"), (5, "5星")],
render_kw={
"class": "form-control"
}
)
tag_id = SelectField(
label="标签",
validators=[
DataRequired("请选择标签!")
],
coerce=int,
choices=[(v.id, v.name) for v in tags],
render_kw={
"class": "form-control"
}
)
area = StringField(
label="地区",
validators=[
DataRequired("请输入地区!")
],
description="地区",
render_kw={
"class": "form-control",
"placeholder": "请输入地区!"
}
)
length = StringField(
label="片长",
validators=[
DataRequired("请输入片长!")
],
description="片长",
render_kw={
"class": "form-control",
"placeholder": "请输入片长!"
}
)
release_time = StringField(
label="上映时间",
validators=[
DataRequired("请选择上映时间!")
],
description="上映时间",
render_kw={
"class": "form-control",
"placeholder": "请选择上映时间!",
"id": "input_release_time"
}
)
submit = SubmitField(
'提交',
render_kw={
"class": "btn btn-primary"
}
)

1545

被折叠的 条评论
为什么被折叠?



