Your SlideShare is downloading. ×
0
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
What makes pyramid unique
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

What makes pyramid unique

3,908

Published on

0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,908
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
11
Comments
0
Likes
8
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. What Makes Pyramid Unique! Django & Pylons Con 2012 aodag
  • 2. お前誰よAtsushi Odagiri株式会社ビープラウドhttp://twitter.com/aodaghttp://facebook.com/aodag
  • 3. Pyramid 仕事で使ってます機能追加のパッチを投げましたPythonは1.5から。Pyramidは、repoze.bfg1.2のころから。
  • 4. 今日のお話Pyramidって何?どんな特徴が?実際どんな開発の仕方?
  • 5. Pyramidとは?PylonsプロジェクトのWebアプリケーションフレームワークSimple, Fast, Tested, DocumentedNo ORM, No Template Engine.
  • 6. Pyramidができるまで WSGI Zope Pylons Repoze Pyramid
  • 7. Zopeから受け継いだものZope Component ArchitectureURLトラバーサルコンテキストベースのセキュリティ機構
  • 8. Pylonsから受け継いだものWebOb, BeakerなどのWSGIコンポーネントURLパターンでのディスパッチPasteScript(ただしPython3対応のために独自コマンドとして取り込まれた)
  • 9. Pyramidの設計方針仕組みをたくさん提供するポリシーを押し付けないコンポーネント指向を直接見せないことさらマイクロフレームワークを意識しない
  • 10. 特徴的なしくみデコレータベースの設定さまざまなフック例外ビュー
  • 11. デコレータベースの設定 ユニットテスト中に副作用のあるデコレータ が実行されると、うっとおしいですよね?
  • 12. デコレータベースの設定デコレータでビューなどを登録できるただし、いきなり登録するのではなくConfigurator.scan()をトリガーとして、初めて登録される。
  • 13. さまざまなフックフレームワークの途中に処理を 割り込ませたいこと、 たくさんありますよね?
  • 14. さまざまなフックNewRequestTweenBeforeRenderなど
  • 15. 例外ビュー 処理を打ち切って、 さっさとレスポンスを返したいこ と、たくさんありますよね?
  • 16. 例外ビュー例外クラスごとにそれぞれビューを設定可能
  • 17. view predicate 同じ処理だけど、 Ajaxリクエストと ブラウザリクエストで テンプレートとか 変更したいよね?
  • 18. view predicatename xhrcontext acceptroute_name headerrequest_type path_inforequest_method custom_predicaterequest_parammatch_param
  • 19. view predicate@view_config(.... xhr=True, renderer="json")@view_config(... xhr=False, renderer="index.html")def get_something(request): .... return dict(items=items)
  • 20. その他いろいろシングルトンは存在しない継承を多様しない
  • 21. 開発を助けるコマンド群pcreatepservepshellprequestproutespviewsptweens
  • 22. pcreateプロジェクトテンプレート(Scaffold)を展開する開発開始時の土台を作成するツールユーザー定義のプロジェクトテンプレートも作成できる
  • 23. pserveWebアプリケーションを実行する--reloadオプションで、ファイル更新を検地してリロードしてくれるdaemon化やモニタリングしてリスタートさせることも可能
  • 24. pshellWebアプリケーション実行時の環境を擬似的に作成して、Pythonシェルを起動する
  • 25. prequestWebアプリケーションをオフラインで実行して結果を確認できる
  • 26. proutes, pviews, ptweensアプリケーション構成を確認できる。例えば:● URLパターンが実際にどのViewにマッチするの か● 具体的なURLに対応するViewはどれか● Tweenの実行順序はどのようになっているのか
  • 27. よく使うライブラリ、ツールZODB3 distributeSQLAlchemy zc.buildoutzope.sqlalchemy nosedeform/colander alembicWebHelperscliff
  • 28. 有力なアドオンpyramid_tmpyramid_deformpyramid_debugtoolbarpyramid_exclogpyramid_zodbconn
  • 29. PyramidベースのフレームワークSubstanceDKottiCorniceGroundHogMetaTG
  • 30. Pyramidでの開発2つのベースアーキテクチャZODB + トラバーサルSQLAlchemy + URLディスパッチ
  • 31. ZODB + トラバーサルURLパターンとかいらない!URL -> オブジェクトツリーURLでオブジェクト取得例:URL : /great/bucho/showトラバーサル : root[great][bucho]. showがない?showという名前のViewを呼ぶ
  • 32. Pyramidでの開発 環境構築mkvirtualenv pycon2012easy_install pyramidpcreate -s zodb pycon2012cd pycon2012python setup.py develop
  • 33. Pyramidでの開発追加のライブラリなどpyramid_deformdeform_bootstrapcolanderpillowrepoze.filesaferepoze.folder
  • 34. setup.pyに依存ライブラリを追加するinstall_requires = [..."pyramid_deform","deform_bootstrap","colander","pillow","repoze.filesafe","repoze.folder",
  • 35. iniファイルにアドオンを追加するpyramid.includes = .... pyramid_deform deform_bootstrap
  • 36. Pyramidでの開発モデルを書くclass Document(Persistent): def __init__(self, name, contents): super(Document, self).__init__() self.__name__ = name self.contents = contents
  • 37. Pyramidでの開発ビューを書く@view_config(context=Document, renderer=templates/document.pt)def document_view(request): return dict()
  • 38. テンプレートを書く<html><body><h1>${context.__name__}</h1><div>${structure:context.contents}</div></body></html>
  • 39. pshellでモデルデータを登録$ pshell development.ini>>> from pyconjp2012.models importDocument>>> doc = Document(test-document, this-is-document)>>> root[doc.__name__] = doc>>> doc.__parent__ = root>>> import transaction>>> transaction.commit()
  • 40. prequestで試してみよう$ prequest development.ini /test-document<html><body><h1>test-document</h1><div>this-is-document</div></body></html>
  • 41. pserveでWebアプリケーションを実行pserve development.ini --reload
  • 42. ユーザー入力フォームスキーマ定義class AddDocumentSchema(c.Schema): name = c.SchemaNode(c.String()) contents = c.SchemaNode(c.String(), widget=w.RichTextWidget())
  • 43. ユーザー入力(実装)class AddDocumentView(FormView): schema = AddDocumentSchema() buttons = (save,) def save_success(self, params): doc = Document(**params) self.request.context[doc.__name__] = doc doc.__parent__ = self.request.context return HTTPFound(self.request.resource_url(doc))
  • 44. pyramid_deform (表示)${structure:form}
  • 45. Chameleonのテンプレートマクロ(定義)<html metal:define-macro="html"><head><!-- いろんなヘッダ --></head><body metal:define-slot="main"></body></html>
  • 46. Chameleonのテンプレートマクロ(利用)<html metal:use-macro="base.macros.html"><body metal:fill-slot="main">${form}</body></html>
  • 47. まとめ使う場合言われるほど面倒ではない難しいこともない使い切る場合手をいれれられる箇所が多いので、相対的に難しく感じるかも?
  • 48. (´  > ω < )こわくないよー
  • 49. Pyramidの今後Pyramidベースのフレームワークが発展していくPython3対応?ああ、去年やってましたね。テンプレートの標準サポートをなくす方針
  • 50. Pyramidの今後管理アプリが欲しい!今世界中のPylonsどもが実装している。
  • 51. 参考URLThe Pylons Project Documentation http://docs.pylonsproject.org/en/latest/index.htmlPyramid Documentation http://docs.pylonsproject.org/en/latest/docs/pyramid.htmlDefending Pyramids Design http://docs.pylonsproject.org/projects/pyramid/en/master/designdefense.html

×