Flask Python Webアプリケーション

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

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

 

これまでの記事

 

 

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

 

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

 

Python+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の中身などはそちらをダウンロードして確認してください。

 

一瞬で処理が完結する数KB程度の簡単なCSVファイル出力とかであればこれで問題ありませんが、ファイルのダウンロードは時間が掛かる場合とかだとAjaxなどで非同期処理で行うとユーザービリティを損ねずに済みます。

 

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

 

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

 

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

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