【问题标题】:Using Flask button to download list of lists to CSV file使用 Flask 按钮将列表下载到 CSV 文件
【发布时间】:2015-11-10 19:39:27
【问题描述】:

我正在使用 Flask 构建一个非常简单的 Web 界面。页面上有一个按钮,单击时应下载CSV 文件。 CSV 的来源是列表列表。单击按钮时似乎没有任何反应。

from flask import Flask
import csv
import StringIO
from flask import make_response
app = Flask(__name__)
from requests import request

@app.route('/')
def landing():
    return '<input type="submit" name="submit" value="Get Data">'


def data():
    if request.method == 'POST':
        if request.form['submit'] == 'Get Data':
            csvlist = [['item 1', 'item2'], ['box1', 'box2']]

            si = StringIO.StringIO()
            cw = csv.writer(si)
            cw.writerows(csvlist)
            output = make_response(si.getvalue())
            output.headers["Content-Disposition"] = "attachment; filename=export.csv"
            output.headers["Content-type"] = "text/csv"
            return output

if __name__ == '__main__':
    app.run()

【问题讨论】:

    标签: python python-2.7 csv flask


    【解决方案1】:

    您的代码中有几个问题,其中一些是您的按钮不执行任何操作的原因。

    1. 您没有为要提交的按钮创建表单
    2. 您的 data 函数没有 route,因此无法通过表单帖子访问它
    3. 您需要使用flask request 访问method 和form 数据
    from flask import Flask, request, make_response
    import csv
    import StringIO
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def landing():
        return """<form action="data" method="post">
                <input type="submit" name="submit" value="Get Data">
             </form>"""
    
    
    @app.route('/data', methods=['POST'])
    def data():
        if request.method == 'POST':
            if request.form['submit'] == 'Get Data':
                csvlist = [['item 1', 'item2'], ['box1', 'box2']]
    
                si = StringIO.StringIO()
                cw = csv.writer(si)
                cw.writerows(csvlist)
                output = make_response(si.getvalue())
                output.headers["Content-Disposition"] = "attachment; filename=export.csv"
                output.headers["Content-type"] = "text/csv"
                return output
    
    
    if __name__ == '__main__':
        app.run()
    

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 2019-05-21
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 2020-10-15
      • 2018-04-06
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多