ゴミ箱の中のメモ帳

まだ見ぬ息子たちへ綴る手記

Python Bottleでテキストファイルをダウンロードさせる

はてなブログのエクスポーターを作っているとBottleでファイルをダウンロードさせる方法に悩んだ。簡単に解決したが同様の記事が見つからなかったため記事にする。

まずタイトルで「テキストファイルをダウンロードさせる」としている通り、この記事は既存のバイナリファイルをダウンロードさせるのではなく、テキストをPythonコード内で生成し、そのテキストをテキストファイルとしてダウンロードさせることにする。既存のバイナリファイルであればBottleの「static_file()」でダウンロードさせられるし、Pythonで生成したバイナリファイルであればStringIOでストリームを吐き出せば行けるかと思う(未確認)。

初めてのPython 第3版

初めてのPython 第3版


コードは短いが以下の通り。

#!/usr/bin/python
# coding: UTF-8

from bottle import response, get, post, run

@get( "/")
def index():
    return "<form action='' method='post'><input type='submit' value='ダウンロード'></form>"
@post( "/")
def index_post():
    response.content_type = "application/octet-stream"
    response.headers["Content-Disposition"] = "attachment; filename='download.txt'"

    return "this file is download file."

if __name__ == "__main__":
    run( host="localhost", port="8082")

Bottleのresponse()を直接いじってやればいいだけのことであった。やはりBottleは行けてる。Djangoを使うまでもなくBottleとPeeweeで小さなシステムなら組める。

Pythonスタートブック

Pythonスタートブック

パーフェクトPython (PERFECT SERIES 5)

パーフェクトPython (PERFECT SERIES 5)

エキスパートPythonプログラミング

エキスパートPythonプログラミング

Pythonプロフェッショナルプログラミング

Pythonプロフェッショナルプログラミング