Python

Python Bottleのソースを読む ルータ編

投稿日:2016年12月5日 更新日:


Pythonの軽量WebフレームワークBottleのソースを読む ルータ編
 

Class Hierarchy

ここの部分

20160208112338
 

Bottleのルータについて

bottleのルータは特に継承関係はなくRouteとRouterクラスで構成されている

Routerの役割

A Router is an ordered collection of route->target pairs. It is used to efficiently match WSGI requests against a number of routes and return the first target that satisfies the request. The target may be anything, usually a string, ID or callable object. A route consists of a path-rule and a HTTP method.

The path-rule is either a static path (e.g. /contact) or a dynamic path that contains wildcards (e.g. /wiki/). The wildcard syntax and details on the matching order are described in docs:routing.

RouterはRoute情報のコレクションを保持する。

Routeの役割

This class wraps a route callback along with route specific metadata and configuration and applies Plugins on demand. It is also responsible for turing an URL path rule into a regular expression usable by the Router.

Routeはrouteに対するcallback関数やroute特有の情報を保持するオブジェクト。RouteオブジェクトをRouterが一覧で保持することになる。

ルータの使い方

ルータは以下のようにデコレータを指定する。@getや@postはそれぞれGETのみPOSTのみを受け付ける

デコレータには以下が用意されている

ルータの処理

まず起動時のBottleインスタンス化時(default_appが生成されAppStackにpushされる)に、コンストラクタにてRouterがセットされる。

コントローラのデコレータを読み込む

make_default_app_wrapperが呼ばれBottleのdef getが呼ばれる

def getなどはrouteを少しラップしたもの

routeのdecoratorでRouteをインスタンス化(loadでcallback functionを取得しruleとセットで渡す)しBottleのroutesとRouterにrouteを追加する。これらを繰り返しrouteをすべて読み込む。これでpathから特定のactionを呼び出すことができるようになる。


-Python
-,

執筆者:

関連記事

Python Bottleのソースを読む ユニットテスト編

Python Bottleのソースを読む テスト編 前回までで一通りメインの機能は確認できました。ではいよいよコード追加してプルリクを投げましょうというところですが、テストは?ということでユニットテス …

FlaskをBottleと比較した雑感

以前Bottleのソースをチェックしてみた流れでFlaskも見てみた。結論から言うとBottleと大して変わらん。もちろんFlaskのほうがコード量が多く多少リッチではあるもののざっくり機能ベースで言 …

Python Bottleのソースを読む 起動編

Pythonの軽量WebフレームワークBottleのソースを読む 起動編 Bottleとは Bottle is a fast, simple and lightweight WSGI micro we …

Python Bottleのソースを読む テンプレート編

前回に続きPythonの軽量WebフレームワークBottleのソースを読む テンプレート編   Class Hierarchy ここの部分   Bottleのテンプレートについて Bottleのテンプ …

Python Bottleのソースを読む リクエスト・レスポンス編

Pythonの軽量WebフレームワークBottleのソースを読む リクエスト・レスポンス編   Class Hierarchy ここの部分 リクエスト受付からレスポンスまで 前回、サーバの立ち上げ時に …