pyramid框架介绍

45
Pyramid 框框框框 small, documented, tested, extensible, fast, and friendly 框框框 weibo.com/panjunyong 框框框框框 everydo.com

Upload: panjunyong

Post on 25-May-2015

5.707 views

Category:

Technology


7 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Pyramid框架介绍

Pyramid 框架介绍small, documented, tested, extensible, fast, and friendly

潘俊勇 weibo.com/panjunyong

易度云办公 everydo.com

Page 2: Pyramid框架介绍

我来自落魄的 Zope 社区

曾无比风光: Python 杀手应用大客户包括 NASA ,美国海军,通用电气、波士顿在线

Page 3: Pyramid框架介绍

突然回光返照了?

Page 4: Pyramid框架介绍

Pyramid/Zope 历史课

zope2 zope3

grok

Repoze.bfg

bluebream

Pylons

Pyramid

cmf

plone

PaulChisTres

ZODB

Robert, Jim

J2EE

Page 5: Pyramid框架介绍

我的 web 技术生涯 2002 年,开始折腾 python/zope2 2003 年,开始靠 Plone 做些项目 2007 年,开始用 Plone 线上软件运营 2008 年,深入跟踪 Grok 开发框架 2008 年,抛弃 Plone ,用 Zope3 开发易度云办公 2009 年,使用 bfg 做部分应用 2011 年,使用 pyramid 开发易度云查看 未来易度云办公,会更多使用 pyramid

Page 6: Pyramid框架介绍

易度云办公: bluebream

Page 7: Pyramid框架介绍

易度云查看: pyramid

Page 8: Pyramid框架介绍

Python 的 web 框架 微框架

Web.py, flask, bottle, web2py 中型

Pyramid, turbogears 重型框架

Zope / Django / Plone 异步 ( 实时 ) 框架

Twisted, tornado, gevent

Page 9: Pyramid框架介绍

Python 社区数十种 web 框架,选择那个?

女怕嫁错郎男怕入错行

咱 web 程序员怕进错“框”

Page 10: Pyramid框架介绍

企业应用,还是互联网应用? 企业应用:

需求复杂,快速开发 用户数少,性能不关注 能用就行,产品化要求不高

适合重框架 Django/plone/zope

注意 企业应用正在互联网化 基于互联网的企业应用平台

才是发展未来

互联网应用 需求简单 性能非常敏感

适合偏轻框架

互联网是未来

Page 11: Pyramid框架介绍

实时要求高吗? 比如:

聊天 大量实时互动

考虑方案 Twisted Tornado Gevent + 现有轻框架

Page 12: Pyramid框架介绍

对简单的拿捏 Python Zen:

Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated.

崇尚简单,但喜欢 Explicit

Page 13: Pyramid框架介绍

Zope/Django :过重 Zope ,航母级别的重

Limodou 都没学会 开发人员难掌握 我也准备弃用了…

Django 现在很多开发人员不喜欢 下一个 zope ?

Page 14: Pyramid框架介绍

Bob :过轻,这是什么?

Page 15: Pyramid框架介绍

Web.py :不算太简单

Page 16: Pyramid框架介绍

Flask : Fun

Page 17: Pyramid框架介绍

Pyramid :可以简单

https://docs.pylonsproject.org/docs/pyramid_quick_tutorial.html

Page 18: Pyramid框架介绍

也可使用 Decorator 来配置

Page 19: Pyramid框架介绍

使用 Class 定义 view 也行

Page 20: Pyramid框架介绍

不限定模板Mako,

Genshi,

Chameleon,

Jinja2

Page 21: Pyramid框架介绍

View 返回 dict 就行

Page 22: Pyramid框架介绍

HTTP 缓存

Page 23: Pyramid框架介绍

内置的 i18n

pyramid.i18n 基于 zope.i18n 采用 gettext 翻译文件 po/mo

模板也支持 i18n

Page 24: Pyramid框架介绍

性能如何?

http://blog.curiasolutions.com/the-great-web-framework-shootout/

Page 25: Pyramid框架介绍

Pyramid 核心很小 可在 GAE 上运行 支持 Jython 3M 文档, 1M 测试, 804K 模板, 539K 代码( 5 千行代码) Hello world 的 python 运行行数比较

Page 26: Pyramid框架介绍

可以和 gevent 配合使用 参考: https://docs.pylonsproject.org/projects/pyra

mid_cookbook/dev/deployment/gevent.html

Page 27: Pyramid框架介绍

全功能框架 helloworld

Page 28: Pyramid框架介绍

微框架

Page 29: Pyramid框架介绍

php

Page 30: Pyramid框架介绍

全功能框架 - 模板

Page 31: Pyramid框架介绍

微框架

Page 32: Pyramid框架介绍

全功能框架 – 数据库

Page 33: Pyramid框架介绍

微框架

Page 34: Pyramid框架介绍

但需求是复杂的… Zope2:

很多类,相互继承,相互依赖 Hooks 、 Monkeypatch 基本不可维护

Zope3 / J2EE :组件架构 分离接口和实现 通过 XML 进行装配 难以理解这些模型

Page 35: Pyramid框架介绍

Pyramid :分拆复杂问题 WSGI 中间件:

python标准,各个 web框架通用

通过消息来通讯( eviron 公共变量)

Repoze ,通过 wsgi 重新实现 zope

Page 36: Pyramid框架介绍

Tween : Pyramid 的中间件

Be - tween 类似WSGI 中间件 Pyramid专用:可操作全局注册表,渲染机制

可控更多:异常处理,事务处理

Page 37: Pyramid框架介绍

Tween

pyramid_tm : 事务处理 pyramid_exclog :异常日志 pyramid_debugtoolbar: 从 flask/django偷过来

Page 38: Pyramid框架介绍

Debugtoolbar 1

Page 39: Pyramid框架介绍

Debugtoolbar 2

Page 40: Pyramid框架介绍

很多可选插件 Pyramid_beaker Pyramid_chameleon_genshi Pyramid_handlers Pyramid_jinja2 Pyramid_mailer Pyramid_rpc Pyramid_who pyramid_xmlrpc Pyramid_zcml pyramid_jqm

Page 41: Pyramid框架介绍

配置扩展

Page 42: Pyramid框架介绍

事件机制 : no hooks! 内核运行的时候抛出事件

ApplicationCreated/NewRequest/ContextFound NewResponse/BeforeRender/

定义事件处理函数

Page 43: Pyramid框架介绍

图漫游 Traverse URL地址 : RESTful直接 URL地址直接对象寻址

Model寻址 + View http://host:port/news/12312/@@view.html http://host:port/news/12312/@@edit.html

指定一个 root 对象,使用 __getitem__ 来寻址 无需配置 Route!权限体系 非常灵活,这个是 Plone致胜的法宝特别适合 ZODB

Page 44: Pyramid框架介绍

其他特色 测试框架丰富的完整的文档 ZCA / 接口 ZCML

Page 45: Pyramid框架介绍

谢谢大家

Questions ?

广告:我们需要靠谱 Pythoner