LoginSignup
5
6

More than 5 years have passed since last update.

flask

Last updated at Posted at 2013-11-07

flask

werkzeugとjinja2を活用したフレームワーク。
マイクロフレームワーク。外部ライブラリを除けばビュー周りしかサポートしていない。

スレッドローカルなオブジェクトたち

werkzeug.localを使ってrequest等をグローバルオブジェクトに見立てる。
→これはどこからでもアクセスできるようにするためか?当然実装コードは複雑化している。

?LocalProxyがスレッドセーフであることはどうやって確保されている?
→thread.get_ident or gleenlet.get_current関数で得られるidをキーに、Localオブジェクトがデータを管理しているので、同じキーの更新は複数スレッドから起こらないということ。

コンテキスト

各種コンテキストオブジェクトはグローバルな形式でアクセスできるようになっている。

セッション

werkzeugのセッションモジュールは全く使っていない。
SessionInterfaceとSessionCookieSessionがキー。SessionInterfaceがセッションの生成や保存等の操作を担い、SessionCookieがセッション情報を持つ。
セッションはRequestContextに保持される。

操作とデータが分離しているので、一見反オブジェクト指向な感じがするが、sessions.pyというひとつのモジュールとして捉えればそうでもないのだろう。

コンフィグレーション

app.configオブジェクトを通してConfigインスタンスにアクセスする。
コンフィグオブジェクトはdictのサブクラスであるため、flask側で設定していない値も設定可能。
ConfigAttributeをアプリケーションオブジェクトに設定することで、アプリケーションオブジェクトから一部の設定値にアクセスすることが可能。ConfigAttributeはコンフィグインスタンスへの仲介をしているだけ。ちょっと必要性は疑わしい。

戻り値

戻り値をrvと表記する緩いルールがあるよう。処理が長い関数では何が戻り値なのかわかりやすく良い反面、rvという名前に戻り値であること以外の情報はないため、どのような値が返るのか最初に明示しないと可読性を下げる。

ビュー

render_templateやjsonifyなど、フォーマットに応じたビュー関数。

ブループリント

アプリケーションの操作を拡張できる機能。ベースとなるアプリケーションを作ったり、大きなアプリケーションをURLルートごとに複数に分割することが可能となる。

wtforms

flaskで紹介されているバリデーションフレームワーク。

パラメータデータコンバートとバリデーション

データコンバートはFormインスタンス生成時(process)、バリデーションはvalidateメソッド実行時に行っているが、データコンバートでエラーがでてもエラー情報を保持しておくだけで例外は伝播させない。validate実行時にマージされる。

5
6
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
5
6