Python web 开发框架 Pyramid

博客地址:https://ask.hellobi.com/blog/zhiji 欢迎你们来交流学习。html

在Python web 开发框架里有多种选择,有**DjangoTornado、Flask、web2py、Pylons、Pyramid等等,以前写过Django、Tornado,今天咱们主要学习Pyramid**,仍是从官方文档学起。python

官方文档 = 新华字典

#1.Pyramid Pyramid 是 Pylons 项目下面一系列已经发行的软件中的一员。**Pylons 官网**描述了 Pyramid 和 Pylons Project 的关系。web

Pyramid以其高效率和快节奏的开发能力而出名。官方文档是这样描述的:Pyramid is a small, fast, down-to-earth Python web framework. It is developed as part of the Pylons Project. It is licensed under a BSD-like license. 此开源Web框架有一个独立于平台的MVC结构,提供了开发的最简途径。此外,它仍是高效开发重用代码的首选平台之一。数据库

##Pyramid 和其余 web 框架(由Pyramid英文文档翻译) 第一个 Pyramid 版本的前生(叫作 repoze.bfg )建立于 2008 年。2010 年底,咱们把 repoze.bfg 更名为 Pyramid 并于同年11月份合并到 Pylons 项目中。浏览器

Pyramid 的灵感来源于 Zope、Pylons 1.0 和 Django ,最终,Pyramid 向它们各自借鉴一些概念和特性并组成一个独特的框架。bash

Pyramid 的许多特性都要追溯到 Zope 。像 Zope 应用程序同样,Pyramid 应用程序是易于扩展的:若是你遵照必定的规则,那么你的应用程序将会被重用、改进、重构,甚至被第三方开发者扩展而不用 fork 原始程序。 Traversal 和 declarative security 等概念都是在 Zope 中首先被提出来的。服务器

Pyramid 的 URL dispatch 概念受 Pylons 1.0 版本的 Routes 系统启发的,Pyramid 像 Pylons 1.0 版本同样采用自由政策。它没有指定你应该使用哪一个数据库,它的内置模板只是为了方便。实际上,它仅仅提供一种将 URL 映射到 view 代码上的机制,以及调用那些 views 的规则。你能够无偿使用第三方组件来知足你项目的需求。app

Pyramid 常用的 view 这一律念来自 Django 。Pyramid 的文档风格比起 Zope 更像 Django 。框架

相似 Pylons 1.0 版本,却不像 Zope ,一个 Pyramid 应用程序开发者可使用一个完整的语句命令去执行一个框架经常使用的配置任务好比增长一个 view 或者一个 route 。在 Zope 里面 ZCML 也有相似功能。Pyramid 支持随时可用的命令语句配置和基于修饰符的配置;ZCML 经过一个扩展包 pyramd_zcml 使用。函数

既不像 Zope ,也不像 “full-stack” 这样的框架好比 Django ,Pyramid 对于你使用哪种持续化的机制构建应用程序不作任何假设。Zope 应用程序依赖于 ZODB;Pyramid 也容许你建立 ZODB 程序但却不依赖 ZODB 自己。一样,Django 倾向于假定你想要把你的应用程序数据存储在一个关系型数据库中。Pyramid 从不作这些假设,它容许你使用关系型数据库可是不鼓励也不阻止的决定。

其余的 Python web framework 都宣称他们本身是一个类成员 web framework 叫作model-view-controller 框架,Pyramid 也属于这一类。

##框架 VS 库 (由Pyramid英文文档翻译)

一个 框架 和一个 库 最大的区别在于:库里面的代码被你写的代码 调用 ,而框架则是 调用 你写的代码。使用一系列的库来建立应用程序一般在刚开始的时候要比使用框架简单,由于你能够有选择性地放弃一些控制权给不是你写的库代码。可是当你使用一个框架的时候,你必须放弃绝大部分的控制权交给那些不是你写的代码:整个框架。你不是必须使用一个框架来建立一个 WEB 应用程序在使用 Python 的状况下。一大批丰富的库都被已经被开发出来。然而在实际应用中,使用框架去建立应用要比使用一系列的库更加实用,若是这个框架提供的一些列功能都符合你的项目要求。

#2.Pyramid的安装 官网讲的仍是蛮清楚的,照着来就行。

  • 安装setuptools 下载**ez_setup.py**(进入该页面后网页另存为ez_setup.py便可,记住存在D;\python目录下)。cmd进入D:\python目录,执行
python ez_setup.py 
复制代码

  • 安装virtualenv 用python目录下的Script/easy_install程序安装virtualenv:
easy_install virtualenv
复制代码
  • 用virtualenv建立工做区
virtualenv --no-site-packages env
复制代码
  • 安装pyramid 执行完上面的步骤后应该多了一个env文件,cd env文件夹,而后执行
easy_install pyramid
复制代码

#3.Pyramid使用

###1.建立第一个pyramid应用程序

from wsgiref.simple_server import make_server
from pyramid.config import Configurator
from pyramid.response import Response


def hello_world(request):
    return Response('Hello %(name)s!'%request.matchdict)

if __name__ == '__main__':
    #建立了一个Configuration类的实例config
    config = Configurator()
    #注册了一个以/hello/开头的URL路由,路由的名字就叫'hello'
    config.add_route('hello','/hello/{name}')
    #注册了一个view callable函数 URL Path(好比/hello/world)->route(好比'hello')->view callable(好比hello_world函数)
    config.add_view(hello_world,route_name='hello')
    #pyramid.config.Configurator.make_wsgi_app()方法来建立WSGI应用程序
    app = config.make_wsgi_app()
    #启动了一个WSGI服务
    server = make_server('0.0.0.0',8080,app)
    #serve_forever()方法建立了一个循环来接受外界的request请求
    server.serve_forever()
复制代码

打开你的浏览器,输运行运行入http://localhost:8080/hello/world,将会显示“Hello world!”。 如今咱们对这个示例程序有了一个基本的认识,接下来一步一步分析它是如何工做的。

  • Imports 包 第2行引入了pyramid.config模块的Configurator类,第10行建立了它的一个实例,而后经过这个实例来配置咱们的应用。 跟其余Python web框架同样,Pyramid 用 WSGI 协议来将一个应用程序和web服务器联系到一块儿。而第一行用到的wsgiref模块就是WSGI服务的一种封装,如今wsgiref已经被引入Python 标准库了。 第三行引入了pyramid.response.Response,用来返回response信息。

  • View Callable 声明 第六行定义了一个hello_world函数,传入request参数,返回pyramid.response.Response类的一个实例。经过调用request对象的matchdict方法来输入匹配到的name路径。因为咱们访问的是http://localhost:8080/hello/world,因此匹配到的是world并以“hello world”的字符串返回,若是你访问的是http://localhost:8080/hello/pyramid,那么返回的将是“hello pyramid!”。 这个函数被称为 view callable(你能够叫它视图调用,但我仍是以为用英文的比较好)。 一个视图调用 接受一个参数:request 。 它将返回一个response 对象。 一个view callable不必定是一个函数,也能够是一个类或一个实例, 可是这里为了简单起见,咱们用了函数。 一个view callable老是伴随着调用 request对象。 一个request对象就表明着一个经过被激活的WSGI服务器传送到pyramid的HTTP请求。 一个view callable还须要返回一个response对象。由于一个response对象拥有全部来制定一个实际的HTTP 响应所必要的信息。这个对象经过 wsgi 服务器,也就是Pyramid,转化为文本信息发送回请求的浏览器。为了返回一个response,每一个view callable建立的一个response实例。在 hello_world函数中, 一个字符串做为response的body来返回。

  • Application Configuration 应用程序配置 第10-15行是应用程序的配置信息。 第10行建立了一个Configuration类的实例config,经过这个实例来对咱们的Pyramid应用进行配置,包括路由,ip,端口等信息。调用config的各类方法设置应用程序注册表(application registry),对咱们的应用程序进行注册。什么是application registry?下面是官方解释:

    第11行调用pyramid.config.Configurator.add_route()方法,注册了一个以/hello/开头的URL路由,路由的名字就叫'hello'。 第12行config.add_v运行iew(hello_world, route_name='hello'),注册了一个view callable函数(也就是hello_world函数),当名为'hello'的路由被匹配时应该调用这个函数。 这三者的对应关系也就是URL Path(好比/hello/world)->route(好比'hello')->view callable(好比hello_world函数)。这样,一个前台页面就和一个后台处理方法对应起来了。 WSGI Application Creation 建立WSGI应用程序 当全部的配置工做完成后,python脚本经过pyramid.config.Configurator.make_wsgi_app()方法来建立WSGI应用程序。这个方法返回一个WSGI应用程序对象并传递给app引用,让WSGI服务器来使用。WSGI是一个让服务器能和python应用程序交流的协议。这里不打算深刻探讨WSGI,若是你有兴趣,能够去官网wsgi.org了解更多。 WSGI Application Serving 最后两行,咱们启动了一个WSGI服务。make_server('0.0.0.0',8080,app)方法绑定了ip和端口,最后一个参数传递咱们的app对象(一个router),也就是咱们想服务的那个应用程序。serve_forever()方法建立了一个循环来接受外界的request请求。

运行测试

#4.Pyramid部分语法

  • locals()用法:locals()能够直接将函数中全部的变量所有传给模板。固然这可能会传递一些多余的参数,有点浪费内存的嫌疑。

  • render()方法是render_to_response的一个崭新的快捷方式,前者会自动使用RequestContext。然后者必须coding出来,这是最明显的区别,固然前者更简洁。

return render_to_response('blog_add.html',{'blog': blog, 
'form': form, 'id': id, 'tag': tag},
context_instance=RequestContext(request))

return render(request, 'blog_add.html', 
{'blog': blog, 'form': form, 'id': id, 'tag': tag})
复制代码
相关文章
相关标签/搜索