source

Flask : 버튼을 클릭하면 csv 파일 다운로드

factcode 2023. 2. 9. 22:49
반응형

Flask : 버튼을 클릭하면 csv 파일 다운로드

플라스크/피톤을 막 시작했어요.제가 원하는 것은 HTML에 다운로드 버튼이 있고 다음 기능을 호출하는 것입니다.

function downloadPlotCSV() {
        $.ajax({
            url: "/getPlotCSV",
            type: "post",
            success: function(data) {
                dataPlot = JSON.parse(data);
                console.log(dataPlot);
            }
        });
    }

불완전한 플라스크 코드는 다음과 같습니다.

@app.route('/getPlotCSV', methods = ['POST'])
def plotCSV():
    data = open("outputs/Adjacency.csv")

제가 직면한 문제는 이 CSV 파일을 다운로드하거나 JSON 문자열로 반환하는 방법을 찾을 수 없기 때문에 Javascript를 사용하여 다운로드할 수 없다는 것입니다.JSON으로 보내거나 플라스크 자체를 통해 다운로드 할 수 있는 방법이 없을까요?어떻게 하면 좋을까요?

다음은 Javascript를 사용하지 않고 CSV 파일을 다운로드하는 한 가지 방법입니다.

#!/usr/bin/python

from flask import Flask, Response
app = Flask(__name__)

@app.route("/")
def hello():
    return '''
        <html><body>
        Hello. <a href="/getPlotCSV">Click me.</a>
        </body></html>
        '''

@app.route("/getPlotCSV")
def getPlotCSV():
    # with open("outputs/Adjacency.csv") as fp:
    #     csv = fp.read()
    csv = '1,2,3\n4,5,6\n'
    return Response(
        csv,
        mimetype="text/csv",
        headers={"Content-disposition":
                 "attachment; filename=myplot.csv"})


app.run(debug=True)

를 사용하여 정적 파일을 전송할 수 있습니다.

from flask import send_file

@app.route('/getPlotCSV') # this is a job for GET, not POST
def plot_csv():
    return send_file(
        'outputs/Adjacency.csv',
        mimetype='text/csv',
        download_name='Adjacency.csv',
        as_attachment=True
    )

플라스크 2.0 이전 버전에서는download_name호출되었다attachment_filename.

우선 플라스크에서 수입해야 합니다.make_response응답을 생성하고 변수를 만듭니다.response둘째, 만들기response.content_type = "text/csv"세 번째 - 답변을 회신합니다.

언급URL : https://stackoverflow.com/questions/30024948/flask-download-a-csv-file-on-clicking-a-button

반응형