Successfully reported this slideshow.

More Related Content

Related Audiobooks

Free with a 14 day trial from Scribd

See all

Python3でwebアプリ

  1. 1. Python3で Webアプリケーション aodag PyConJP2012
  2. 2. お前誰よ Atsushi ODAGiri aodag @aodag 株式会社ビープラウド
  3. 3. Python3! Python3.2.3 Python3.3rc2 来週(9/22)に3.3finalの予定
  4. 4. Python3での重要な変更 標準ライブラリが整理された str,unicodeがbytes,strに。ユニコードと生データと の違いが明確に。 相対importの扱いが変更された。相対モジュール をインポートするときは、 "from . "が必要に。
  5. 5. Python3の情報 PYPI Python3Packages http://pypi.python.org/pypi?: action=browse&c=533&show=all
  6. 6. Python3の情報 Wall Of Shame http://python3wos.appspot.com/
  7. 7. すでにPython3対応している フレームワーク Pyramid Bottle Bobo CherryPy Tornado
  8. 8. Python3での課題 PEP333(WSGI 1.0) であいまいな点が多い 特に文字コード、ユニコード関連 Python3では bytesとstrの違いが明確になった。 WSGIでも明確に! -> PEP3333(WSGI 1.0.1)
  9. 9. WSGIで行こう def hello(environ, start_response): start_response(['200 OK', ('Content-type', 'text/plain')]) return [b"Hello"] from wsgiref.simple_server import make_server httpd = make_server('', 8080, hello) httpd.serve_forever()
  10. 10. (´・ω・`) めんどくさいですねぇ
  11. 11. とりあえず必要だと思うもの リクエストオブジェクト ルーティング HTMLテンプレート WSGIサーバー
  12. 12. WebObで行こう from webob.dec import wsgify @wsgify def hello(request): return "Hello" from wsgiref.simple_server import make_server httpd = make_server('', 8080, hello) httpd.serve_forever()
  13. 13. WSGIサーバー cherrypy waitress tornado
  14. 14. URLディスパッチ WebDispatch WSGIアプリの様々なディスパッチをサポート URLパターン リクエストメソッド
  15. 15. WebDispatch dispatcher = URLDispatcher() dispatcher.add_url('top', '/', index) dispatcher.add_url('hello', '/hello/{name}', hello) dispatcher.add_url('top', '/good-by', bye)
  16. 16. urlvars urlパターン:/hello/{name} 実際のurl: /hello/aodag urlvars: {'name': 'aodag'} @wsgify def hello(request): name = request.urlvars.get('name', 'world') return "Hello, {0}".format(name)
  17. 17. テンプレートエンジン Jinja2 Mako Chameleon Tempita ...
  18. 18. (`・ω・) 意外と充実!
  19. 19. jinja2 loader=PackageLoader(__name__, 'templates') env = Environment(loader=loader)
  20. 20. jinja2 @wsgify def hello(req): name = req.urlvars.get('name', 'world') tmpl = env.get_template('index.html') return tmpl.render(name=name)
  21. 21. (`・ω・) これで **MVC** できるね!
  22. 22. CSSとか 画像とか どうするの
  23. 23. NGINXでやれよ!
  24. 24. と、思いますが、 開発中にNginx使うのも萎えるので。
  25. 25. スタティックファイルを扱う webob.static.FileApp webob.static.DiectoryApp
  26. 26. static_resource = pkg_resources.resource_file (__name__, 'static') static_app = DirectoryApp(static_resource) application.add_url('static', '/static/*', static_app)
  27. 27. (´・ω・`) データはどうしよう
  28. 28. データベースアクセス ドライバ: psycopg2 ORM: SQLAlchemy マイグレーション: alembic
  29. 29. (`・ω・) 予想以上に ちゃんと動くぞ!
  30. 30. セッション Beaker Beaker自体は動く バックエンドは Memory, Fileは問題なし その他のバックエンドは依存ライブラリが対応して いるか未確認
  31. 31. 認証 repoze.who (trunk) 多分 2.1 でリリース 使いたければ setup.py の dependency_links に以 下を追加 https://github.com/repoze/repoze. who/zipball/master#egg=repoze.who-2.1dev
  32. 32. フォームライブラリ deform colander 問題なく利用可能。 っていうか僕が対応しました(・∀・)
  33. 33. 画像処理 pillow はよ
  34. 34. (´・ω・`) PILとかは 非公式パッチで 動くらしいですねぇ
  35. 35.        |    \  __  /    _ (m) _ピコーン       |ミ|     /  `´  \      ('A`)      ノヽノヽ        くく
  36. 36. 画像処理 PyQtにQImageがあるじゃないか!
  37. 37. PyQt 説明しよう!PyQtとは! UNIX系のデスクトップ環境KDEで採用されている ことで有名なGUIツールキットQtのPythonバイン ディングである! つまり! 画像をリサイズするためだけに、GUIツールキット を使おうとしているのである!
  38. 38. (゚д゚ )
  39. 39. ( ゚д゚ )
  40. 40. QImageを使うために QImageがQtGUIモジュールにあるため、ヘッドレ ス不可能 LinuxだったらX11が必要になります Qtをインストール PyQtをインストール
  41. 41. ファイルアップロードからの サムネイル保存 data = validated['image']['fp'].read() image = QtGui.QImage.fromData(data) thumbnail = image.scaled(128, 128, aspectRatioMode=Qt.KeepAspectRatio) thumbnail.save(thumbnail_filename)
  42. 42. まとめ 画像処理だけ難あり? 他は結構でそろっている が、実際にはフレームワークを使うことになるでしょ う。
  43. 43. つまり、Django待ち
  44. 44. 参考 ● Wall of Shame http://python3wos.appspot. com/ ● PyPI Python3 Packages http://pypi.python. org/pypi?:action=browse&c=533&show=all ● Python Web Server Gateway Interface v1.0 ● http://www.python.org/dev/peps/pep-333/ ● Python Web Server Gateway Interface v1. 0.1 http://www.python.org/dev/peps/pep- 3333/

×