如何使用 Flask 中的蓝图修复表单中不允许的 405 方法

How to fix 405 Method Not Allowed in forms, using Blueprint in Flask

我在HTML中有一个文件上传表单,应该用来上传并保存到静态文件夹。问题是它在一个简单的 Flask 应用程序中工作正常,但它 不能使用蓝图模板

我尝试了几种不同的方法来完成这项工作。当我使用“url_for”时,页面甚至没有加载(werkzeug.routing.BuildError:无法为端点构建 url 'upload'。你的意思是 'forms_blueprint.upload' 吗?).

但是当我把"url_for"改成“form_upload.html”时,结果总是方法不被允许.

感谢所有想法。

routes.py:

UPLOAD_FOLDER = '/home/juliosouto/flask-gentelella/app/uploaded_files/'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER


@blueprint.route('/<template>', methods = ['GET', 'POST'])
@login_required
def route_template(template):
    return render_template('form_upload' + '.html')


@blueprint.route('/upload', methods=['POST','GET'])
def upload():
    file = request.files['file']
    filename = secure_filename(file.filename)
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))

form_upload.html:

<form action ="{{ url_for('upload') }}" class= "dropzone" name="file" method = "POST" enctype = "multipart/form-data"></form>

我需要将文件保存到静态文件夹。

When I use "url_for", the page doesn't even load (werkzeug.routing.BuildError: Could not build url for endpoint 'upload'. Did you mean 'forms_blueprint.upload' instead?).

这正是它所说的意思。当你构建 URL 时,你需要按如下方式进行:

{{ url_for('forms_blueprint.upload') }}

此外,正如@gittert 正确指出的那样,您的上传路径return什么都没有。

这应该呈现一个模板,或者 return 重定向到其他地方。