73
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BottleのRequest/Responseオブジェクトをマスター

Last updated at Posted at 2014-03-03

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)をセットできる
  • 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
73
69
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
73
69

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?