Flask でアプリケーションを作る際のメモ
自分用のメモ。
Flask はマイクロフレームワークを詠っているが、大きめのアプリケーションを作る事が出来る。
自分で色々組み合わせて行くのが好きなので Flask を使う。
メンドクサイのなら、素直に Django とか Pyramid なフルスタックを使えば良い。
Modular Applications with Blueprints — Flask 1.0.2 documentation
Flask で大きなアプリケーション Blueprint ver. - 混沌脳内
アプリケーションの構成
お手本としたアプリケーション*1
danjac / newsmeme — Bitbucket
http://www.ninxit.com/blog/2011/03/09/flask-mvc-sample/
基本的に上記に影響を受けてる。
├── manage.py └── app ├── __init__.py ├── configs ├── forms ├── i18n ├── models │ ├── __init__.py │ ├── meta.py │ ├── mappers │ └── tables ├── plugins ├── static ├── templates ├── tests ├── utils └── views ├── __init__.py ├── frontend └── admin
manage.py は Flask-Actions — Flask-Actions 0.6.4 documentation もしくは Flask-Script documentation has moved... を使用。
データベース
SQLAlchemy をそのまま使う。もしくは Flask-SQLAlchemy を使う。
自分は SQLAlchemy をそのまま使ってる。
JSON
SQLAlchemy のオブジェクトを JSON 化する場合は、Bitbucket | The Git solution for professional teams を使うと便利。
フォーム
シンプルな事しか出来ないが自分には事足りるので WTForms のエクステンションの Flask-WTF — Flask-WTF 0.9.1 documentation を使う。
CSRF のバリデーションも出来るので、エクステンションを使う。
Complex Validation with Flask-WTF | Flask (A Python Microframework)
複雑な事をしようとすると https://docs.pylonsproject.org/projects/deform/dev/ の方が良いのかもしれないけど未調査。
Form libraries
テスト
view のテストは Flask に付いてる テストクライアントを使用。
ロジック部分は unittest を使用。
テストランナーはNote to Users — nose 1.3.7 documentation を使用。
ログ
ログを出しておかないと椅子が飛んでくるそうなので…。
Flask に組み込んであるログを使えばよい。
設定ファイルからの読み込み、ハンドラーの設定等は danjac / newsmeme / source / newsmeme / application.py — Bitbucket を参考にした。
RESTful
PUT や DELETE は WEB ブラウザから使用できないので、ミドルウェアを使用する。
Overriding HTTP Methods for old browsers | Flask (A Python Microframework)
認証
Pagination
Simple Pagination | Flask (A Python Microframework)
Flask-SQLAlchemy を使用するのなら上記が内包されている。
HTTP サーバ&WSGI サーバ
nginx + Gunicorn - Python WSGI HTTP Server for UNIX & http://meinheld.org/ のコンビ。
*1:Flask の最新版だと Module を使ってるので警告がでる