尝试使用 Flask 上传文件时,我收到错误'NoneType' object has no attribute 'filename'
。
我正在遵循文档,但我无法完全让它工作。
class SubmitLocations(Form):
title = TextField("Name Of Location (What do the locals call it)")
description = TextField("Please describe the location")
upload = FileField("Please select an image to upload")
@app.route('/add_spot/', methods=["GET","POST"])
@login_required
def add_spot():
try:
form = SubmitLocations(request.form)
if request.method == "POST":
title = form.title.data
description = form.description.data
f = form.upload.data
filename = secure_filename(f.filename)
f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
这是我的 HTML 表单
<form method=post enctype="multipart/form-data" action="/add_spot/">
<dl>
{{render_field(form.title)}}
{{render_field(form.description)}}
{{render_field(form.upload)}}
</dl>
<p><input type=submit value=Submit></p>
</form>
页面呈现得很好,我可以选择要上传的文件,但是当我提交时,我收到上面提到的错误'NoneType' object has no attribute 'filename'
我想知道是否有人可以指出我的错误?也许我遗漏了一个关键部分?
需要注意的是,如果我删除文件上传部分,我可以提交此表单而不会出错。
您提交的表单似乎没有文件。您需要先验证表单。如果您依赖于拥有该文件,请将FileRequired
添加到验证器中。
from flask_wtf.file import FileRequired
class SubmitLocations(Form):
# ...
upload = FileField("Please select an image to upload", validators=[FileRequired()])
def add_spot():
form = SubmitLocations(request.form)
# changed this line
if form.validate_on_submit():
title = form.title.data
description = form.description.data
f = form.upload.data
filename = secure_filename(f.filename)
f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))