Flask - 没有正确响应GET请求?

时间:2014-02-04 05:19:37

标签: html forms flask

我正在尝试在页面上设置下载按钮,该按钮会在单击时开始下载文件。使用flask作为我的框架。我正在尝试在单击按钮时开始下载并发送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表单和网络编程的初学者。谢谢。

1 个答案:

答案 0 :(得分:2)

  1. 您实际上return实际上send_from_directory return render_template,因此该文件永远不会返回给最终用户。
  2. 无论如何,你永远不会得到代码,因为在你进入测试方法之前你是name
  3. 您无法使用您在那里的代码区分页面加载和“下载”点击。
  4. 如何修复#3

    • 在下载链接表单中添加<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>
      

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

      {{1}}