FlaskによるWebアプリ開発⑥~ファイルダウンロード機能を実装する

この記事は約4分で読めます。

 

これまでの記事

 

 

 

Flaskでファイルダウンロード機能を実装する

 

webアプリを作るにおいて、よくあるのが、ログとか履歴とかのファイルダウンロード機能。今回はこれをFlaskで実装していきたいと思います。

 

Flaskでのフロント側とのファイルのやり取りはHTMLを返すrender_template()の他に以下の3つが選択肢に上がってきます。

 

  • send_file()
  • send_from_directory()
  • make_response()

 

 

よくあるファイルのダウンロードの場合だと、send_file() send_from_directory() かだが、基本的に send_from_directory() で問題ないと思います。

 

 

<app.py>

from flask import Flask, send_from_directory
import os
app = Flask(__name__)


@app.route('/')
def index():
    return "<html><h3>Flaskでファイルダウンロードを実装する</h3><a href='/export'>csvダウンロード</a></html>"


@app.route("/export")
def export_action():
    # 現在のディレクトリを取得
    path = os.path.abspath(__file__)[:-7]
    return send_from_directory(
        directory=path + '\export_temp',
        filename='test.csv',
        as_attachment=True,
        attachment_filename='test.csv',
    )

app.run(debug=True)

https://github.com/beginerSE/Flask_filedownload

 

 

 

ただバックエンドで機械学習とかディープラーニングを行って、その学習過程とかをMatplotlibで画像にプロットして、その画像をフロント画面に返したい、なんて場合は、ファイル形式だけでなくバイナリも渡せる make_response() を使うって感じだと思います.

 

 

関連記事:【Python】FlaskでMatplotlibでプロットしたグラフを表示させる

 

 

終わり

 

サンプルコードはGitの方に挙げているので、ファイル構成やCSVの中身などはそちらをダウンロードして確認してください。

 

簡単なCSV出力とかならこれで問題ありませんが、ファイルのダウンロードは時間が掛かる場合とかだとAjaxなどで非同期処理で行うことが多いです。

 

 

 

関連記事:【Python】Bottleとajaxでデータのアップロード処理を実装する

 

関連記事:【Python】Flask+SQLAlchemyを使って、「ひとこと掲示板」を作る

 

 

 

 

 

コメント

タイトルとURLをコピーしました