メモ_Flaskアプリでjson fileをダウンロードさせる機能を追加

Flaskで構築したWebアプリに、Webページなどに表示させているデータをjson形式でダウンロードさせるための機能の追加についてのメモ。超簡単。

 

サンプルコード:

from flask import Flask, Response, json

app = Flask(__name__)

@app.route('/json/')
def download_json(filename):
    # JSONデータを作成
    data = {
        "key1": "value1",
        "key2": "value2",
        "key3": "value3"
    }

    # JSONデータを文字列に変換
    json_str = json.dumps(data)

    # レスポンスを作成してContent-Dispositionヘッダーを設定し、ダウンロードさせる
    response = Response(json_str, content_type='application/json')
    response.headers['Content-Disposition'] = f'attachment; filename={filename}.json'
    return response

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

このコードでは、/json/のURLにアクセスすると、JSONデータがダウンロードされます。 Content-Dispositionヘッダーに指定したattachmentが、ブラウザに対してファイルをダウンロードさせる、という設定になっています。

filenameパラメータには、ダウンロード時にファイル名として表示されるものを指定します。上記の例では、.jsonの部分をURLで指定したファイル名に置き換えます。

注意点として、子のサンプルでは実際のJSONデータの取得方法やエラーハンドリングなど、セキュリティ面は考慮されていないので、実際に公開するアプリでは、その辺も考慮する必要がありますね。Flaskのバージョンやサーバーの設定によっては、ヘッダーの設定が適切に動作しないことがありそうです。