Download - Werkzeugを使ってみた #osakapy 2016/04
Werkzeugといえば…
• 読み方わからん!
2http://qiita.com/mzsm/items/dff7db90151220bb5b28
Werkzeugの読み方
• ヴェルクツォイク!
3
http://qiita.com/mzsm/items/dff7db90151220bb5b28
Werkzeug - The Python WSGI Utility Library
• WSGIアプリを書くときのユーティリティ
• Flaskのベースライブラリでもある
• こういう機能があります
• HTTP header parsing and dumping
• Easy to use request and response objects
• Interactive JavaScript based in-browser debugger
• 100% WSGI 1.0 compatible
• Supports Python 2.6, 2.7 and 3.3.
• Unicode support
• Basic session and signed cookie support
• URI and IRI utilities with unicode awareness
• builtin library of fixes for buggy WSGI servers and browsers
• integrated routing system for matching URLs to endpoints and vice versa
4
ローカルPCでの開発の悩み
• Apache上でWebアプリケーションを実行しているところがツラい
• 開発環境の構築が面倒
• Apacheの設定ファイルが秘伝のタレ化
• IDEとは別のプロセスで動かすため、デバッグがちょっと手間
6
Werkzeugの簡易Webサーバー機能を使う
• Apacheの別プロセスとしてではなく、1つのPythonプロセスとしてWSGIアプリケーションを起動
• IDEのローカルデバッガが使える
• 開発環境の構築が楽 (必要なライブラリを入れてすぐ実行できる)
7
from werkzeug.serving import run_simple
def application(environ, start_response): # returns WSGI application
if __name__ == '__main__': run_simple('localhost', 4000, application)
秘伝のタレ部分はMiddlewareを使う
• http://werkzeug.pocoo.org/docs/0.11/middlewares/
• Webアプリケーションに必要な処理を間に挟められる
• Chain of Responsibility形式で使うことができる
• Werkzeugが標準で提供しているMiddleware
• SharedDataMiddleware → URLとローカルフォルダを紐付ける
• DispatcherMiddleware → URLと別のWSGIアプリを紐付ける
8
from werkzeug.serving import run_simple from werkzeug.wsgi import SharedDataMiddleware
if __name__ == '__main__': application = SharedDataMiddleware(app, { '/static': 'dir/to/static/contents' }) run_simple('localhost', 4000, application)
必要なものがないので書いた
• こういうMiddleware
• 静的コンテンツが来たら、まずローカルフォルダを見て、該当するファイルがあればそれを返す
• なければ元リクエストヘッダをそのまま引き継いで指定の別Webサーバーにリクエストを投げて結果をレスポンスとして返す
• ※静的コンテンツを多く抱える開発現場で需要あるかも?
• ※もう少し汎用的に書けると思うので、閃いたらソース公開予定
9
他、Werkzeugの便利ポイント
• ソースコードの自動リロード
• 簡易Webサーバーへのリクエスト単位でプロファイリング
• ブラウザ上で動くデバッガ
• …
• などなどWebの開発で便利な機能が色々あります。
11