1ファイルフレームワークBottleは気軽にWebAPIなどを実装する際に便利ですね。ResponseとRequestオブジェクトの使い方についてメモしておきます。
Request
bottle.request
にアクセスすると、現在処理しているリクエストにアクセスできます。以下の例ではbottle.
を省略します。
- GETリクエストの場合のフォームパラメータ:
request.query
- POST/PUTリクエストの場合のフォームパラメータ:
request.forms
- GET/POST/PUT全部まぜこぜのフォームパラメータ
request.params
- HTTPヘッダの取得:
request.get_header('User-Agent')
- HTTPメソッド:
request.method
- リクエスト本文(body):
request.body
- アクセスされたURL:
request.url
urlpartsも便利 - リモートアドレス:
request.remote_addr
Response
bottleのrouteデコレータで修飾された処理関数は、文字列か、HTTPResponseクラスのインスタンスを返す必要があります。ここでは主にHTTPResponseクラスについて述べます
- HTTPResponseクラスのコンストラクタはstatusとbodyをオプショナルに受け取る。
- bodyのデフォルト値は
''
- statusのデフォルト値は
None
=> 基本的には200になる - statusは
200
のようなステータスコードか,'200 OK'
のようなステータスのフル表記のどちらか
- bodyのデフォルト値は
- 属性bodyで本文(body)をセットできる
-
set_header(name, value)
でHTTPヘッダを追加できる- 同様に
get_header(name)
もある
- 同様に
from bottle import HTTPResponse
body = '<html><body>ok</body></html>'
r = HTTPResponse(status=200, body=body)
r.set_header('Content-Type', 'text/html')
bodyは後からr.body = '...'
のようにセットすることも可能なようです。
リダイレクトするレスポンス例
@route('/gotosomewhere')
def gotosomewhere():
r = HTTPResponse(status=302)
r.set_header('Location', 'http://example.com')
return r
JSONを返す例
import simplejson as json
@route('/something.json')
def somethingjson():
body = json.dumps({'message': 'hello world'})
r = HTTPResponse(status=200, body=body)
r.set_header('Content-Type', 'application/json')
return r