Pyramid 介绍

Pyramid 是一个python web应用程序 框架 . 它旨在使创建Web应用程序更加容易。它是开源的。

Pyramid 遵循这些设计和工程原则:

简单性

Pyramid 设计为易于使用。即使你不完全理解,你也可以开始。当你准备做更多的时候, Pyramid 会在那儿等你的。

极少主义

走出盒子, Pyramid 仅提供几乎所有Web应用程序所需的核心工具:将URL映射到代码、安全性和服务静态资产(如javascript和css文件)。其他工具提供模板化、数据库集成等。但与 Pyramid 你可以 “只为你吃的东西付钱” .

文档

Pyramid 致力于全面和最新的文件。

速度

Pyramid 设计得非常快。

可靠性

Pyramid 被保守地发展和彻底地测试。我们的座右铭是:“如果不测试,它就坏了。”

开放性

和 Python 一样, Pyramid 软件分布在 permissive open source license .

为什么是金字塔?

在一个充斥着网络框架的世界里,你为什么要选择 Pyramid

现代的

Pyramid 与python 3完全兼容。如果你发展成 Pyramid 今天的应用程序,您可以放心,您将能够使用您最喜欢的语言的最现代的功能。在未来的几年里,您将继续致力于一个最新和前瞻性的框架。

测试

未测试的代码被设计破坏。这个 Pyramid 社区有很强的测试文化,我们的框架反映了这一点。每次发布 Pyramid 报表覆盖率为100%(按 coverage )以及95%的决策/条件覆盖率。(通过测量) instrumental )它是自动测试使用 Travis 以及Jenkins在每次提交到GitHub存储库后对Python的支持版本进行更新。 Official Pyramid add-ons 符合类似的测试标准。

我们仍然在 Pyramid 但是我们注意到,在使用可靠的测试机制进行项目时,我们发现它们的数量要少得多。

文件化的

这个 Pyramid 文件是全面的。我们努力使我们的叙述性文件既完整又对新来者友好。我们还保持 Pyramid Community Cookbook 展示你可能面临的常见场景的食谱。我们始终感谢您对我们文件的改进作出的贡献。我们一直欢迎对我们的 official tutorials 以及对我们的新贡献 community maintained tutorials .

支持

你可以很快得到帮助 Pyramid . 我们的目标是不 Pyramid 问题得不到回答。无论您是在IRC上、在塔架讨论邮件列表上还是在StackOverflow上提出问题,您都可能得到一个合理的及时响应。

Pyramid 对新来者来说也是一个欢迎、友好的空间。我们不能容忍“支持巨魔”或那些喜欢在我们的支持渠道中痛斥其他用户的人。我们努力保持它的良好照明和新的用户友好。

参见

另请参阅我们的 #pyramid IRC channel 我们的 pylons-discuss mailing list ,以及 支持和发展

金字塔的独特之处

有许多可用于Web开发的工具。什么会让人想用 Pyramid 相反?什么使 Pyramid 独特的?

Pyramid 您可以编写非常小的应用程序,而无需了解很多。通过学习更多,您也可以编写非常大的应用程序。 Pyramid 会让你迅速变得富有成效,并与你一起成长。当你的应用程序很小时,它不会阻碍你,当你的应用程序变大时,它也不会妨碍你。其他应用程序框架似乎分为两类:支持“小应用程序”的和为“大应用程序”设计的。

我们认为你不应该做出这样的选择。你真的不知道你的应用程序会有多大。当一个小应用程序变得“太大”时,您当然不必在另一个框架中重写它。一个设计良好的框架应该能够同时兼顾这两方面。 Pyramid 是那种框架。

Pyramid 提供了一组在PythonWeb框架中独一无二的功能。其他人可以提供一些,但仅限于 Pyramid 在一个地方提供所有文件,并且 点菜 不需要支付整个宴会的费用。

生成单个文件应用程序

你可以写一个 Pyramid 完全位于一个python文件中的应用程序。这样的应用程序很容易理解,因为所有东西都在一个地方。部署起来很容易,因为您不需要太了解Python打包。 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 World!')


if __name__ == '__main__':
    with Configurator() as config:
        config.add_route('hello', '/')
        config.add_view(hello_world, route_name='hello')
        app = config.make_wsgi_app()
    server = make_server('0.0.0.0', 6543, app)
    server.serve_forever()

使用装饰器配置应用程序

Pyramid 允许您将配置保持在代码旁边。这样,您就不必切换文件来查看配置。例如:

from pyramid.view import view_config
from pyramid.response import Response

@view_config(route_name='fred')
def fred_view(request):
    return Response('fred')

然而,使用 Pyramid 配置修饰符不会更改代码。它仍然易于扩展、测试或重用。您可以测试代码,就好像装饰器不在那里一样。您可以指示框架忽略一些修饰符。甚至可以使用强制样式来编写配置,完全跳过修饰符。

生成应用程序URL

动态Web应用程序生成的URL可以根据您查看的内容进行更改。 Pyramid 提供灵活、一致、易于使用的生成URL的工具。当您使用这些工具编写应用程序时,您可以更改配置,而不必担心断开网页中的链接。

参见

也见 生成路由URL .

服务于静态资产

Web应用程序通常需要JavaScript、CSS、图像和其他所谓的 静态资产 . Pyramid 为这些类型的文件提供灵活的工具。您可以直接从 Pyramid 或者将它们托管在外部服务器或cdn(内容交付网络)上。不管怎样, Pyramid 可以帮助您生成URL,这样您就可以在不更改任何代码的情况下更改文件的来源。

参见

也见 服务静态资产 .

交互开发

Pyramid 可以自动检测您对模板文件和代码所做的更改,因此您的更改将立即在浏览器中可用。可以使用普通的旧版本进行调试 print() 调用,将显示在控制台中。

Pyramid 有一个调试工具栏,允许您在浏览器中查看有关应用程序如何正常工作的信息。请参阅配置、已安装的包、SQL查询、日志语句等。

当应用程序出现错误时,交互式调试器允许您从浏览器中浏览以了解发生了什么。

使用 Pyramid 调试工具栏,用我们的 cookiecutter .

参见

也见 调试工具栏 .

用电源调试

如果出了问题, Pyramid 为您提供了解决问题的强大方法。

您可以配置 Pyramid 将有用信息打印到控制台。这个 debug_notfound 设置显示有关不匹配的URL的信息。这个 debug_authorization 设置提供了一些有用的消息,说明为什么不允许您做刚尝试过的事情。

Pyramid 还有命令行工具来帮助您验证配置。你可以使用 proutespviews 检查URL如何连接到应用程序代码。

扩展应用程序

Pyramid 附加组件用有用的能力扩展框架的核心。有一些附加组件可用于您最喜欢的模板语言、SQL和NoSQL数据库、身份验证服务等。

支持 Pyramid 附加组件与框架本身具有相同的严格标准。您会发现它们经过了充分的测试,并且有良好的文档记录。

参见

另请参见https://typyramid.com/extending-pyramid.html

写下你的观点, your 方式

任何框架的基本任务都是将URL映射到代码。在 Pyramid ,该代码称为 view callable . 视图可调用项可以是函数、类方法,甚至是可调用类实例。您可以自由选择最适合您的用例的方法。不管你怎么选择, Pyramid 对待他们一样。你可以随时改变主意而不受任何惩罚。各种方法之间没有人为的区别。

以下是定义为函数的可调用视图:

1from pyramid.response import Response
2from pyramid.view import view_config
3
4@view_config(route_name='aview')
5def aview(request):
6    return Response('one')

以下是一些定义为类方法的视图:

 1from pyramid.response import Response
 2from pyramid.view import view_config
 3
 4class AView(object):
 5    def __init__(self, request):
 6        self.request = request
 7
 8    @view_config(route_name='view_one')
 9    def view_one(self):
10        return Response('one')
11
12    @view_config(route_name='view_two')
13    def view_two(self):
14        return Response('two')

参见

也见 @view_config 安置 .

发现 your 静态资产

在许多Web框架中,应用程序所需的静态资产保存在一个全局共享的位置上。 静止的 目录“。其他人使用查找方案,比如一组有序的模板目录。在定制方面,这两种方法都有问题。

Pyramid 采取不同的方法。静态资产的定位使用 资产规格 ,包含对python包名和文件或目录名的引用的字符串,例如 MyPackage:static/index.html . 这些规范用于模板、JavaScript和CSS、翻译文件以及任何其他绑定到包的静态资源。通过使用资产规格, Pyramid 使您可以轻松地使用其他包扩展应用程序,而不用担心冲突。

如果另一个呢 Pyramid 您使用的包提供了您需要自定义的资产?也许那个页面模板需要更好的HTML,或者你想更新一些CSS。使用资产规范,您可以使用简单的包装器覆盖其他包中的资产。

实例: 了解资产规格压倒一切的资产 .

使用 your 模板

Pyramid ,创建 Response 属于A renderer . 任何模板系统mako,变色龙,jinja2都可以是渲染器。事实上,所有这些系统都存在包。但是,如果您愿意使用另一个,则存在一个结构化的API,允许您使用您最喜欢的模板系统创建渲染器。您可以使用模板系统 you 理解,而不是框架所要求的。

另外, Pyramid 不会使您专门使用单个模板系统。即使在同一个项目中,也可以使用多个模板系统。

例子: 直接使用模板 .

编写可测试视图

当你使用 renderer 如果视图可调用,则无需返回“webby” Response 对象。相反,您的视图可以返回一个简单的python字典。 Pyramid 将负责将字典中的信息呈现给 Response 代表你。因此,您的视图更容易测试,因为您不需要解析HTML来评估结果。 Pyramid 使为视图编写单元测试成为一种快捷方式,而不是要求您使用功能测试。

例如,典型的Web框架可能返回 Response 来自A的对象 render_to_response 呼叫:

1from pyramid.renderers import render_to_response
2
3def myview(request):
4    return render_to_response('myapp:templates/mytemplate.pt', {'a':1},
5                              request=request)

而你 can 这样做 Pyramid ,还可以返回python字典:

1from pyramid.view import view_config
2
3@view_config(renderer='myapp:templates/mytemplate.pt')
4def myview(request):
5    return {'a':1}

通过将视图配置为使用渲染器,可以 Pyramid 使用 {{'a':1}} 字典和指定的模板以代表您呈现响应。

字符串作为 renderer= 以上是 asset specification . 资产规格在 Pyramid . 它们允许更可靠的定制。见 发现 your 静态资产 更多信息。

例子: 渲染器 .

使用事件协调操作

在编写Web应用程序时,在请求生命周期的某个特定点上运行代码通常很重要。在 Pyramid ,您可以使用 订户事件 .

例如,每次应用程序处理新请求时,可能都需要完成一项作业。 Pyramid 发射一个 NewRequest 请求处理生命周期中此时的事件。可以使用清晰的声明性样式将代码注册为此事件的订阅服务器:

from pyramid.events import NewRequest
from pyramid.events import subscriber

@subscriber(NewRequest)
def my_job(event):
    do_something(event.request)

Pyramid 的事件系统也可以扩展。如果需要,可以创建自己的事件并使用 Pyramid 的事件系统。然后,任何使用您的应用程序的人都可以订阅您的事件并与您的代码进行协调。

例子: 使用事件事件类型 .

构建国际应用程序

Pyramid 其核心是国际化相关功能:本地化、多元化,以及从源文件和模板创建消息目录。 Pyramid 通过使用翻译域允许多个消息目录。您可以创建一个具有自己的翻译的系统,而不会与其他域中的其他翻译冲突。

例子: 国际化与本土化 .

构建高效的应用程序

Pyramid 提供了一种简单的方法 隐藏物 观点缓慢或昂贵的结果。可以在视图配置中指示要缓存视图:

@view_config(http_cache=3600) # 60 minutes
def myview(request):
    # ...

Pyramid 将自动添加适当的 Cache-ControlExpires 它创建的响应的头。

add_view() 方法的 http_cache 有关详细信息的文档。

构建快速应用程序

这个 Pyramid 核心是快的。它从地面到地面的设计速度。当你要求它完成一项工作时,它只做你绝对必要的工作。如果您需要应用程序的速度, Pyramid 是你的正确选择。

示例:https://blog.curiasolutions.com/pages/the-great-web-framework-shootout.html

存储会话数据

Pyramid 具有对HTTP会话的内置支持,因此您可以在请求之间将数据与特定用户关联。许多其他框架也支持会话。但是 Pyramid 允许您插入自己的自定义会话系统。只要您的系统符合一个文档化的接口,您就可以将它放在所提供的系统中。

目前,第三方redis会话系统有一个绑定包可以做到这一点。但是,如果您有专门的需求(也许您希望将会话数据存储在MongoDB中),您可以这样做。甚至可以在实现之间切换,而无需更改应用程序代码。

例子: 会议 .

优雅地处理问题

错误会发生。问题突然出现。没有人写没有错误的代码。 Pyramid 提供处理代码遇到的异常的方法。安 exception view 是一种特殊类型的视图,当出现特定的异常类型而不被应用程序处理时,将自动调用该视图。

例如,您可以为 Exception 异常类型,它将捕获 all 例外,并呈现一个相当“好,这是令人尴尬”的页面。或者您可以选择只为特定于应用程序的异常注册异常视图。当找不到文件或用户没有权限执行某项操作时,可以创建一个。在前一种情况下,您可以显示一个漂亮的“未找到”页面;在后一种情况下,您可以显示一个登录表单。

例子: 自定义异常视图 .

还有更多…

Pyramid 已经建成与其他一些复杂的设计特点,使其适应性。阅读下面关于它们的更多信息。

什么是塔架项目?

Pyramid 是在塔架项目下发布的软件集合的成员。Pylons软件是由一个松散的贡献者社区编写的。这个 Pylons Project website 包括有关如何 Pyramid 与塔架项目有关。

Pyramid 和其他Web框架

第一版 Pyramid 的前任(已命名 repoze.bfg )制造于2008年7月。2010年底,我们更名为 repoze.bfgPyramid . 它被并入了塔架项目 Pyramid 那一年的11月。

Pyramid 受到启发 ZopePylons (版本1.0),以及 Django . 因此, Pyramid 从每个框架中借用几个概念和特性,将它们组合成一个独特的Web框架。

类似 ZopePyramid 应用程序可以很容易地扩展。如果您在框架的约束范围内工作,则可以生成可重用、修改或扩展的应用程序,而无需修改原始应用程序代码。 Pyramid 也继承了 traversal 以及Zope的声明性安全。

类似 Pylons 版本1, Pyramid 基本上没有政策。它不会断言应该使用哪个数据库或模板系统。您可以自由使用符合特定应用程序需求的任何第三方组件。 Pyramid 也继承了它的方法 URL dispatch 从塔吊。

类似 DjangoPyramid 重视广泛的文档。此外,A的概念 view 被使用 Pyramid 就像是姜戈写的那样。

其他的python web框架将自己作为名为 model-view-controller 框架。作者 Pyramid 不要认为MVC模式特别适合Web。但是,如果这个抽象对您有效, Pyramid 通常也适用于这一类。