【问题标题】:How to fix 405 Method Not Allowed in forms, using Blueprint in Flask如何使用 Flask 中的蓝图修复表单中不允许的 405 方法
【发布时间】:2019-02-12 12:20:28
【问题描述】:

我有一个 HTML 格式的文件上传表单,应该用于上传并保存到静态文件夹。问题是它在一个简单的 Flask 应用程序中运行良好,但它只是无法使用蓝图模板

我尝试了几种不同的方法来完成这项工作。当我使用“url_for”时,页面甚至无法加载(werkzeug.routing.BuildError: Could not build url for endpoint '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>

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

【问题讨论】:

  • 您的上传路由默认为 GET 请求,但似乎没有提供 render_template 或返回。此外,您可能希望在处理文件上传之前执行 if request.method == Post 之类的操作,然后返回 Get 方法或任何其他路由。
  • @gittert,我也试过了。没有工作。

标签: python html forms flask blueprint


【解决方案1】:

当我使用“url_for”时,页面甚至无法加载(werkzeug.routing.BuildError: 无法为端点“上传”构建 url。您的意思是“forms_blueprint.upload”吗?)。

这正是它所说的。当您构建 URL 时,您需要执行以下操作:

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

此外,正如@gittert 正确指出的那样,您的上传路由什么也不返回。

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

【讨论】:

  • 完美,@v25。我无法想象这是字面意思。它工作并立即解决了问题!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 2020-09-15
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多