pylons 看了好久了,喜欢的他精简封装,就想它自己的名字一样,“ 架线塔 ” 松散话。说是框架,其实也不是框架。
只是把一些模块结合起来,随着对pylons的了解的越来越深入,越着迷。其中好些信息看文档是不深入的,一些疑惑
还是要看pylons的源码的(别怕,pylons的源码核心没多少),说回来,python的web开发不都是围绕wsgi 走的吗?
本质就不复杂,有些框架复杂,是外围太庞大了,把本质掩盖在里面。
pylons 的核心就是 “ 垂直的 Middleware + 横向的 Controller ”
Middleware 就像是千层饼 外部的 “ 层饼 ”
Controller 就是里面的 “ 馅 ”
有 “ 肉馅千层饼” , “豆沙千层饼” ......
Middleware 在系统级别上 垂直复用。 Controller 在应用逻辑级别上 平行处理
一些关键点:
1、程序的入口:
$app\config\middleware.py 中的
make_app(global_conf, full_stack=True, static_files=True, **app_conf):
global_conf 等一系列参数,都是通过解析配置文件得到的。
config = load_environment(global_conf, app_conf) 中 把 route 的mapper 也包含在里面了。
这个config 可以说是运行环境了。
接下来关键点
2、 app诞生
app = PylonsApp(config=config)
app 被注入运行环境,各种参数和处理逻辑。但是这个时候也只是 “被注入”了而已,程序还没运行。
然后一系列的链式 Middleware 一层一层的引用封装。
这个时候 Middleware 垂直体系已经建立。wsgiapp 完成。但是还没有run。
3、run
所有的python框架再怎么变化,最后都要有这么一个轮回,app毕竟只是app,它要在服务容器中运行。
当然,这外部容器五花八门,这里不是重点,不多讲,wsgi app的命运是要被外部 调用的。
app 的 __call__(self, environ, start_response) 方法被调用。
刚才说,app 外面包了很多层的 Middleware ,所以这个按 “ 先进后出 ” 的方式 一层一层调用。
Middleware 调用到最后,到最底层 PylonsApp 里面的 __call__,又一个关键点
controller = self.resolve(environ, start_response)
Controller 诞生。根据信息,找到 调用的 Controller
下一步
response = self.dispatch(controller, environ, start_response)
调用 Controller 产生 response ,
然后再一层一层 由外部的 Middleware 再对 response 处理。
所以,这里 Controller 在整个体系的只占很小一部分,也是pylons 让用户去写逻辑的一部分。
所以各种应用,各种形式的 只要满足 wsgi 都可以在pylons 上跑,因为pylons 已经把逻辑抽离出来了。
对 Pyamf 的困惑也游刃而解,Pyamf 对 pylons 的支持 只不过 按照自己的需要 定制了一个 自己的 Controller
而已, pylons 的众多特性已经在使用当中。
感受到此结束,enjoy !!
分享到:
相关推荐
The Definitive Guide to Pylons.pdf
主要介绍了Python Web框架Pylons中使用MongoDB 的例子,大家参考使用
In this book, cofounder and lead developer James Gardner brings you a comprehensive introduction to Pylons, the web framework that uses the best of Ruby, Python, and Perl and the emerging WSGI ...
pyramid是最新python web开发框架,pylons升级版。
python库,解压后可用。 资源全名:Pylons-0.8.2-py2.3.egg
资源来自pypi官网。 资源全名:Pylons-0.8.2-py2.3.egg
Apress.the.Definitive.Guide.to.Pylons.Dec.2008
塔架 Pylons是一个快速的Web应用程序开发框架。 笔记定向塔已与repoze.bfg合并,并且现在处于仅维护模式。 强烈建议新项目从新的合并的Web框架。安装。 如果要从源代码安装,可以运行以下命令: $ python setup.py ...
可用于UnityVR开发,3D游戏开发,高清天空盒子Skybox素材,游戏环境背景素材,无水印。 让你身临其境的天空盒子,各类题材丰富,都是辛苦搜罗所得的高清exr格式...4-用刚创建的Material代替项目中原本的系统默认Skybox
博文链接:https://zsp.iteye.com/blog/178446
我团队工作的故事之一是研究现有的Python分析工具,这些工具可用于我们的一些新Web堆栈(全部在Pylons中)。 我看了几个repoze.profile , kea.profile ,甚至dozer (仍然是0.2alpha)-但找不到适合我们用例的任何...
Mako是什么?Moko是Python写的一个模板库,Python官网python.org用的就是它。...因此,将 Mako 集成到 Django 中,以取代 Django 自带的模板引擎,也许是一个不错的办法。可以提高模板的灵活性和可操作性。
PyISAPIe是适用于Python的IIS / Apache ISAPI扩展。 它大大优于CGI / FastCGI解决方案,并支持Django,Trac,Pylons和任何符合WSGI的框架。
pyramid1.2源码安装包。pyramid是最新python web 开发框架。是pylons的升级版。
从 GitHub 中检出这个包(必须是 Substance D 团队 Pylons 组织的成员): $ git clone git@github.com:Pylons/sdidev.git cd 进入sdidev目录。 从下载 virtualenv 并将其安装到您的系统 Python (2.7+) 中。 安装...
JCR是一个基于Python的Web应用,面向大型项目和非常正式的code review。它可以用来review任何类型的代码,不仅是java代码,但一些特殊的功能只适用于Java项目。 JCR 主要想协助: 审查者 - 所有的代码更改都会被...
该项目的一个目标是提供一个基于gevent的API,该API可以跨不同的基于WSGI的Web框架(金字塔,Pylons,Flask,web2py,Django等)使用。 在您的框架中gevent-socketio只需约3行代码。 注意:您需要使用gevent python...