How To Drink Wsgi
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

How To Drink Wsgi

on

  • 2,126 views

 

Statistics

Views

Total Views
2,126
Views on SlideShare
2,122
Embed Views
4

Actions

Likes
0
Downloads
16
Comments
0

1 Embed 4

http://www.slideshare.net 4

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

How To Drink Wsgi Presentation 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