Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
69
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@tomotaka_ito

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

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
69
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
69
Help us understand the problem. What is going on with this article?