Flask 文件在上传时未检测到
Flask file not detecting on upload
我用这个字段制作了一个 flask_wtf 表单:
logo_image = FileField('logo_image', validators=[FileRequired(), FileAllowed(['jpg', 'png'], 'Images only!')])
我的表单如下所示:
<form action="" method="POST" name="app_branding" enctype="multipart/form-data">
{{ form.csrf_token }}
{{ form.brand.label }} {{ form.brand }}
{{ form.logo_image.label }} {{ form.logo_image }}
{{ form.title_text.label }} {{ form.title_text }}
{{ form.first_paragraph.label }} {{ form.first_paragraph }}
{{ form.faq.label }} {{ form.faq }}
{{ form.privacy_policy.label }} {{ form.privacy_policy }}
{{ form.success_message.label }} {{ form.success_message }}
{{ form.submit.label }} {{ form.submit }}
</form>
为了调试,在我看来,我把:
@expose('/', methods=['GET', 'POST'])
def index(self):
form = BrandForm(request.form)
print(form.validate())
print(form.errors)
print("request.files")
print(request.files)
并且在控制台中我收到消息说 logo_image 是必需的,即使它在 request.files:
中
False
{'logo_image': ['This field is required.']}
request.files
ImmutableMultiDict([('logo_image', <FileStorage: u'20140725_095232.jpg' ('image/jpeg')>)])
如何获取 FileRequired() 方法来检测文件?
request.form
仅包含表单输入数据。 request.files
包含文件上传数据。您需要将两者的组合传递给表单。由于您的表单继承自 Flask-WTF 的 Form
(现在称为 FlaskForm
),如果您不向表单传递任何内容,它将自动处理此问题。
form = BrandForm()
if form.validate_on_submit():
...
如果没有 Flask-WTF,请使用 CombinedMultiDict
合并数据并将其传递给表单。
from werkzeug.datastructures import CombinedMultiDict
form = BrandForm(CombinedMultiDict((request.files, request.form)))
if request.method == 'POST' and form.validate():
...
我用这个字段制作了一个 flask_wtf 表单:
logo_image = FileField('logo_image', validators=[FileRequired(), FileAllowed(['jpg', 'png'], 'Images only!')])
我的表单如下所示:
<form action="" method="POST" name="app_branding" enctype="multipart/form-data">
{{ form.csrf_token }}
{{ form.brand.label }} {{ form.brand }}
{{ form.logo_image.label }} {{ form.logo_image }}
{{ form.title_text.label }} {{ form.title_text }}
{{ form.first_paragraph.label }} {{ form.first_paragraph }}
{{ form.faq.label }} {{ form.faq }}
{{ form.privacy_policy.label }} {{ form.privacy_policy }}
{{ form.success_message.label }} {{ form.success_message }}
{{ form.submit.label }} {{ form.submit }}
</form>
为了调试,在我看来,我把:
@expose('/', methods=['GET', 'POST'])
def index(self):
form = BrandForm(request.form)
print(form.validate())
print(form.errors)
print("request.files")
print(request.files)
并且在控制台中我收到消息说 logo_image 是必需的,即使它在 request.files:
中False
{'logo_image': ['This field is required.']}
request.files
ImmutableMultiDict([('logo_image', <FileStorage: u'20140725_095232.jpg' ('image/jpeg')>)])
如何获取 FileRequired() 方法来检测文件?
request.form
仅包含表单输入数据。 request.files
包含文件上传数据。您需要将两者的组合传递给表单。由于您的表单继承自 Flask-WTF 的 Form
(现在称为 FlaskForm
),如果您不向表单传递任何内容,它将自动处理此问题。
form = BrandForm()
if form.validate_on_submit():
...
如果没有 Flask-WTF,请使用 CombinedMultiDict
合并数据并将其传递给表单。
from werkzeug.datastructures import CombinedMultiDict
form = BrandForm(CombinedMultiDict((request.files, request.form)))
if request.method == 'POST' and form.validate():
...