Pyramid框架介绍

6,405 views

Published on

在2011年珠三角技术沙龙web版的发言

Published in: Technology
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,405
On SlideShare
0
From Embeds
0
Number of Embeds
1,092
Actions
Shares
0
Downloads
95
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

Pyramid框架介绍

  1. 1. Pyramid 框架介绍 small, documented, tested, extensible, fast, and friendly 潘俊勇 weibo.com/panjunyong 易度云办公 everydo.com
  2. 2. 我来自落魄的 Zope 社区 曾无比风光: Python 杀手应用 大客户包括 NASA ,美国海军, 通用电气、波士顿在线
  3. 3. 突然回光返照了?
  4. 4. Pyramid/Zope 历史课 zope2 zope3 grok Repoze.bfg bluebream Pylons Pyramid cmf plone Paul Chis Tres ZODB Robert, Jim J2EE
  5. 5. 我的 web 技术生涯 <ul><li>2002 年,开始折腾 python/zope2 </li></ul><ul><li>2003 年,开始靠 Plone 做些项目 </li></ul><ul><li>2007 年,开始用 Plone 线上软件运营 </li></ul><ul><li>2008 年,深入跟踪 Grok 开发框架 </li></ul><ul><li>2008 年,抛弃 Plone ,用 Zope3 开发易度云办公 </li></ul><ul><li>2009 年,使用 bfg 做部分应用 </li></ul><ul><li>2011 年,使用 pyramid 开发易度云查看 </li></ul><ul><li>未来易度云办公,会更多使用 pyramid </li></ul>
  6. 6. 易度云办公: bluebream
  7. 7. 易度云查看: pyramid
  8. 8. Python 的 web 框架 <ul><li>微框架 </li></ul><ul><ul><li>Web.py, flask, bottle, web2py </li></ul></ul><ul><li>中型 </li></ul><ul><ul><li>Pyramid, turbogears </li></ul></ul><ul><li>重型框架 </li></ul><ul><ul><li>Zope / Django / Plone </li></ul></ul><ul><li>异步 ( 实时 ) 框架 </li></ul><ul><ul><li>Twisted, tornado, gevent </li></ul></ul>
  9. 9. Python 社区数十种 web 框架, 选择那个? 女怕嫁错郎 男怕入错行 咱 web 程序员怕进错“框”
  10. 10. 企业应用,还是互联网应用? <ul><li>企业应用: </li></ul><ul><ul><li>需求复杂,快速开发 </li></ul></ul><ul><ul><li>用户数少,性能不关注 </li></ul></ul><ul><ul><li>能用就行,产品化要求不高 </li></ul></ul><ul><li>适合重框架 </li></ul><ul><ul><li>Django/plone/zope </li></ul></ul><ul><li>注意 </li></ul><ul><ul><li>企业应用正在互联网化 </li></ul></ul><ul><ul><li>基于互联网的企业应用平台才是发展未来 </li></ul></ul><ul><li>互联网应用 </li></ul><ul><ul><li>需求简单 </li></ul></ul><ul><ul><li>性能非常敏感 </li></ul></ul><ul><li>适合偏轻框架 </li></ul><ul><li>互联网是未来 </li></ul>
  11. 11. 实时要求高吗? <ul><li>比如: </li></ul><ul><ul><li>聊天 </li></ul></ul><ul><ul><li>大量实时互动 </li></ul></ul><ul><li>考虑方案 </li></ul><ul><ul><li>Twisted </li></ul></ul><ul><ul><li>Tornado </li></ul></ul><ul><ul><li>Gevent + 现有轻框架 </li></ul></ul>
  12. 12. 对简单的拿捏 <ul><li>Python Zen: </li></ul><ul><ul><li>Beautiful is better than ugly. </li></ul></ul><ul><ul><li>Explicit is better than implicit. </li></ul></ul><ul><ul><li>Simple is better than complex. </li></ul></ul><ul><ul><li>Complex is better than complicated. </li></ul></ul><ul><li>崇尚简单,但喜欢 Explicit </li></ul>
  13. 13. Zope/Django :过重 <ul><li>Zope ,航母级别的重 </li></ul><ul><ul><li>Limodou 都没学会 </li></ul></ul><ul><ul><li>开发人员难掌握 </li></ul></ul><ul><ul><li>我也准备弃用了… </li></ul></ul><ul><li>Django 现在很多开发人员不喜欢 </li></ul><ul><ul><li>下一个 zope ? </li></ul></ul>
  14. 14. Bob :过轻,这是什么?
  15. 15. Web.py :不算太简单
  16. 16. Flask : Fun
  17. 17. Pyramid :可以简单 https://docs.pylonsproject.org/docs/pyramid_quick_tutorial.html
  18. 18. 也可使用 Decorator 来配置
  19. 19. 使用 Class 定义 view 也行
  20. 20. 不限定模板 Mako, Genshi, Chameleon, Jinja2
  21. 21. View 返回 dict 就行
  22. 22. HTTP 缓存
  23. 23. 内置的 i18n <ul><li>pyramid.i18n </li></ul><ul><ul><li>基于 zope.i18n </li></ul></ul><ul><ul><li>采用 gettext 翻译文件 po/mo </li></ul></ul><ul><li>模板也支持 i18n </li></ul>
  24. 24. 性能如何? http://blog.curiasolutions.com/the-great-web-framework-shootout/
  25. 25. Pyramid 核心很小 <ul><li>可在 GAE 上运行 </li></ul><ul><li>支持 Jython </li></ul><ul><li>3M 文档, 1M 测试, 804K 模板, 539K 代码( 5 千行代码) </li></ul><ul><li>Hello world 的 python 运行行数比较 </li></ul>
  26. 26. 可以和 gevent 配合使用 <ul><li>参考: </li></ul><ul><li>https://docs.pylonsproject.org/projects/pyramid_cookbook/dev/deployment/gevent.html </li></ul>
  27. 27. 全功能框架 helloworld
  28. 28. 微框架
  29. 29. php
  30. 30. 全功能框架 - 模板
  31. 31. 微框架
  32. 32. 全功能框架 – 数据库
  33. 33. 微框架
  34. 34. 但需求是复杂的… <ul><li>Zope2: </li></ul><ul><ul><li>很多类,相互继承,相互依赖 </li></ul></ul><ul><ul><li>Hooks 、 Monkeypatch </li></ul></ul><ul><ul><li>基本不可维护 </li></ul></ul><ul><li>Zope3 / J2EE :组件架构 </li></ul><ul><ul><li>分离接口和实现 </li></ul></ul><ul><ul><li>通过 XML 进行装配 </li></ul></ul><ul><ul><li>难以理解这些模型 </li></ul></ul>
  35. 35. Pyramid :分拆复杂问题 <ul><li>WSGI 中间件: </li></ul><ul><ul><li>python 标准,各个 web 框架通用 </li></ul></ul><ul><ul><li>通过消息来通讯( eviron 公共变量) </li></ul></ul><ul><ul><li>Repoze ,通过 wsgi 重新实现 zope </li></ul></ul>
  36. 36. Tween : Pyramid 的中间件 <ul><li>Be - tween </li></ul><ul><li>类似 WSGI 中间件 </li></ul><ul><li>Pyramid 专用:可操作全局注册表,渲染机制 </li></ul><ul><li>可控更多:异常处理,事务处理 </li></ul>
  37. 37. Tween <ul><li>pyramid_tm : 事务处理 </li></ul><ul><li>pyramid_exclog :异常日志 </li></ul><ul><li>pyramid_debugtoolbar: 从 flask/django 偷过来 </li></ul>
  38. 38. Debugtoolbar 1
  39. 39. Debugtoolbar 2
  40. 40. 很多可选插件 <ul><li>Pyramid_beaker </li></ul><ul><li>Pyramid_chameleon_genshi </li></ul><ul><li>Pyramid_handlers </li></ul><ul><li>Pyramid_jinja2 </li></ul><ul><li>Pyramid_mailer </li></ul><ul><li>Pyramid_rpc </li></ul><ul><li>Pyramid_who </li></ul><ul><li>pyramid_xmlrpc </li></ul><ul><li>Pyramid_zcml </li></ul><ul><li>pyramid_jqm </li></ul>
  41. 41. 配置扩展
  42. 42. 事件机制 : no hooks! <ul><li>内核运行的时候抛出事件 </li></ul><ul><ul><li>ApplicationCreated/NewRequest/ContextFound </li></ul></ul><ul><ul><li>NewResponse/BeforeRender/ </li></ul></ul><ul><li>定义事件处理函数 </li></ul>
  43. 43. 图漫游 Traverse <ul><li>URL 地址 : RESTful </li></ul><ul><li>直接 URL 地址直接对象寻址 </li></ul><ul><ul><li>Model 寻址 + View </li></ul></ul><ul><ul><li>http://host:port/news/12312/@@view.html </li></ul></ul><ul><ul><li>http://host:port/news/12312/@@edit.html </li></ul></ul><ul><li>指定一个 root 对象,使用 __getitem__ 来寻址 </li></ul><ul><li>无需配置 Route ! </li></ul><ul><li>权限体系 </li></ul><ul><li>非常灵活,这个是 Plone 致胜的法宝 </li></ul><ul><li>特别适合 ZODB </li></ul>
  44. 44. 其他特色 <ul><li>测试框架 </li></ul><ul><li>丰富的完整的文档 </li></ul><ul><li>ZCA / 接口 </li></ul><ul><li>ZCML </li></ul>
  45. 45. 谢谢大家 Questions ? 广告:我们需要靠谱 Pythoner

×