How To Drink Wsgi

  • 1,629 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,629
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
17
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. How To Drink WSGI aodag twitter:@aodag http://blog.aodag.jp/
  • 2. 自己紹介 去年の6月まで名古屋のWebシステム会社VISHに所属。 Python Workshop東海01開催 Python東海の立ち上げ Python温泉に参加 (いただきます係) 去年の6月から東京に。 Python Hack-a-thonに参加。 #1 講師だったけど、誰もこなかった。 #2 なぜか当日講師にされる。 #3 スィーツを打ち出して企画したのに ビターな野郎どもの巣窟に。
  • 3. WSGI
  • 4. WSGIとは? Web Server Gateway Interface
  • 5. WSGIとは?
  • 6. WSGI その昔 CGIでしか動かないアプリケーション、mod_pythonを前提にしたフ レームワークなどなど フレームワークやアプリケーションを選ぶのに、 利用可能なサーバーによる制限 サーバーとアプリケーションとの間に規格が必要 WSGI PEP333 http://www.python.org/dev/peps/pep-0333/
  • 7. WSGIサーバー wsgiref 標準ライブラリ flup fcgi/scgi サーバー mod_wsgi apacheモジュール Google App Engine クラウド
  • 8. WSGIアプリケーション def hello(environ, start_response): start_response("200 OK", [("Content-type", "text/plain")]) return ["Hello, world!"]
  • 9. environ 環境変数 CGI変数 HTTP_ACCEPT QUERY_STRING REQUEST_METHOD CONTENT_TYPE CONTENT_LENGTH PATH_INFO SCRIPT_NAME wsgi変数 wsgi.version wsgi.input wsgi.errors wsgi.multithreaded
  • 10. start_response レスポンスステータス "200 OK" レスポンスヘッダー ("Content-Type", "text/plain")
  • 11. 戻り値 strを返すiterator 一番簡単なのは文字列のリスト ["Hello, world!"] でも ["Hello, ", "world!"]でも同じ Listライクオブジェクトでも、generatorでもよし。 ただし、遅延評価は要注意 WSGIでは、chunkedレスポンスを正式にサポートしてません。 遅延させたい人はTornadoを調べてみましょう。
  • 12. ミドルウェア WSGIアプリケーションは、呼び出し可能オブジェクト WSGIアプリケーションの中からWSGIアプリケーションを呼び出して もいいよね? 関数から関数呼ぶだけですから!
  • 13. WSGIミドルウェア
  • 14. WSGIミドルウェア def middleware(app): def wrap(environ, start_response): # ここで前処理 data = app(environ, start_response) # ここで後処理 return data return wrap
  • 15. sqlalchemy transactionalミドルウェア def transactional(session): def dec(app): def wrap(environ, start_response): environ["sa.session"] = session try: data = app(environ, start_response) session.commit() return data finally: session.remove() return wrap return dec
  • 16. ミドルウェアを使う @permission(role=permissions.Admin) @transactional(session) @wsgify def update(req): session = req.environ['sa.session'] a = session(model.A).query().all() #なんか操作 session.commit()
  • 17. WSGI開発の手助け Paste Request, Responseオブジェクト Basic認証やDigest認証などの認証ミドルウェア PasteDeploy setuptoolsに基づいたミドルウェアコンフィグレーション PasteScript WSGIアプリケーションを起動させるコマンド  WebOb PasteのRequest,Responseが書き直されたもの Werkzeug 可搬性の高いDjangoっぽいコンポーネント
  • 18. テンプレートエンジン Mako 速い Tempita シンプル Genshi XML Jinja2 Djangoっ ぽい
  • 19. WSGIを意識したフレームワーク Pylons ほとんどの機能をコンポーネントを集めることで実現しているフレー ムワーク repoze.bfg zopeのコンポーネントを分解した後に、WSGIアプリケーションとして 再構成したフレームワーク
  • 20. WSGIRef from wsgiref.simple_server import make_server def application(environ, start_response): start_response("200 OK", [("Content-type", "text/plain")]) return ["Hello, world!"] httpd = make_server('', 8000, application) httpd.serve_forever()
  • 21. Demo