【问题标题】:Flask - not responding to a GET request properly?Flask - 没有正确响应 GET 请求?
【发布时间】:2014-02-04 13:38:51
【问题描述】:

我试图在页面上设置一个下载按钮,单击该按钮将开始下载文件。使用烧瓶作为我的框架。我试图在单击按钮并发送 GET 请求时开始下载,但没有任何反应。在我的控制台中,我得到了"127.0.0.1 - - [04/Feb/2014 00:10:57] "GET /CpFTHHpsJ/ HTTP/1.1" 200 -",这与加载页面时得到的输出相同。

我的 HTML 表单如下所示:

<form method="get" action="">
<input type="submit" value="DOWNLOAD">
</form>

我的 python 用于渲染下载页面和发送文件:

@app.route('/<new_folder_name>/', subdomain='f', methods=['GET'])
def uploaded_file(new_folder_name):
    new_folder_path = os.path.join(app.config['FILE_FOLDER'], new_folder_name)
    filename = subfolder_fetch(new_folder_path)
    return render_template("download.html", filename=filename, new_folder_path=new_folder_path)
    if request.method == "GET":
        send_from_directory(new_folder_path, filename, as_attachment=True)

对不起,如果这是愚蠢的,我是 HTML 表单和网络编程的初学者。谢谢你。

【问题讨论】:

  • 看起来您在调用 send_from_directory 之前正在渲染并返回 download.html。

标签: html forms flask


【解决方案1】:
  1. 您实际上从来没有return 您的send_from_directory,因此文件永远不会返回给最终用户。
  2. 无论如何,你永远都不会接触到代码,因为在你接触到你的测试方法之前,你return render_template。
  3. 您无法使用那里的代码区分页面加载和“下载”点击。

如何解决 #3

  • 在下载链接表单中添加name:

    <input type="submit" name="action" value="Download">
    

    并测试它是否存在于您的控制器中:

    if "action" in request.args:
        # Download
    else:
        # Show page
    
  • 或者,使用指向单独控制器的链接:

    @app.route('/<folder>/download')
    def download_file(folder):
        # etc.
    

    并在您的模板中创建一个链接并将其设置为按钮:

    <a href="{{ url_for('download_file', folder=folder) }}" class="download">Download Now</a>
    

【讨论】:

    猜你喜欢
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2018-04-12
    • 2021-11-04
    • 2021-08-28
    • 1970-01-01
    相关资源
    最近更新 更多