Python Pyramid 简明教程

Python Pyramid - Application Configuration

Pyramid 应用程序对象拥有一个应用程序注册表,用于存储视图函数到路由的映射,以及其他特定于应用程序的组件注册。Configurator 类用于构建应用程序注册表。

Configurator 生命周期由上下文管理器管理,它返回一个应用程序对象。

with Configurator(settings=settings) as config:
   #configuration methods
   app = config.make_wsgi_app()

Configurator 类定义了下列重要方法,用于自定义应用程序 −

add_route()

此方法注册一个路由用于 URL 派发。使用以下参数 −

  1. name - 第一个必需的位置参数必须是路由的唯一名称。当注册视图或生成 URL 时,名称用于标识路由。

  2. pattern - 第二个必需的位置参数是一个字符串,表示 URL 路径(可选地包含变量占位符,用于从 URL 解析变量数据)。占位符用花括号括起来。例如:"/students/{id}"。

  3. request_method - 值可以是“GET”、“POST”、“HEAD”、“DELETE”、“PUT”之一。只有此类型的请求将与路由匹配。

add_view()

此方法会向应用程序注册表添加视图配置。它将一个视图函数绑定到配置中的 route_name 。需要的参数有:

  1. view - 视图函数的名称。

  2. route_name - 必须与路由配置声明的名称匹配的字符串。

  3. request_method - 表示 HTTP REQUEST_METHOD 的字符串(如“GET”、“POST”、“PUT”、“DELETE”、“HEAD”或“OPTIONS”)或包含一个或多个此类字符串的元组。

add_static_view()

此方法会添加一个 view 用于呈现静态资产(如图片和 CSS 文件),并使用以下参数:

  1. name - 此参数是一个字符串,表示应用程序相对的本地 URL 前缀或一个完整的 URL。

  2. Path - 此参数表示静态文件所在磁盘上的路径。其值可以是绝对路径或包相对路径。

此方法进而调用 Configurator 对象的 add_route() 方法。

add_notfound_view()

该方法添加一个视图,当视图查找程序在当前请求中找不到匹配的视图时执行。以下代码显示了一个示例:

from pyramid.config import Configurator
from pyramid.response import Response

def notfound(request):
   return Response('Not Found', status='404 Not Found')

config.add_notfound_view(notfound)

add_forbidden_view()

配置应用程序注册表,以定义在出现 HTTPForbidden 异常时执行的视图。参数列表包含对返回 403 状态响应的函数的引用。如果没有提供参数,则注册表会添加 default_exceptionresponse_view().

add_exception_view()

此方法导致为指定异常向配置中添加异常视图函数。

make_wsgi_app()

此方法返回 Pyramid WSGI 应用程序对象。

scan()

此包装器用于注册视图。它导入所有应用程序模块,寻找 @view_config 装饰器。

对于每个装饰器,它使用相同的关键字参数调用 config.add_view(view)。调用 scan() 函数会扫描包和所有子包中的所有装饰。

执行应用程序注册表配置的一系列典型语句如下代码段所示:

from pyramid.config import Configurator

with Configurator() as config:
   config.add_route('hello', '/')
   config.add_view(hello_world, route_name='hello')
   app = config.make_wsgi_app()

这种应用程序配置方法被称为命令式配置。Pyramid 提供了另一种配置方法,称为装饰配置。

Declarative Configuration

有时,通过命令式代码进行配置变得非常困难,尤其在应用代码分散在许多文件中时。声明式配置是一种便捷的方法。 pyramid.view 模型定义了 view_config - 一个函数、类或方法修饰器,该修饰器允许在非常接近视图函数自身定义的位置注册视图。

@view_config() 修饰器提供了两个重要参数。它们是 route_namerequest_method 。它们与 Configurator 类的 add_route() 方法中给出的说明相同。紧跟在它下面的函数获得了修饰,以便将它绑定到添加到应用对象的注册表中的路由。

以下是 hello_world() 视图函数声明式配置示例:

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

@view_config(route_name='hello', request_method='GET')
def hello_world(request):
   return Response('Hello World!')

view_config 修饰器向 hello_world() 函数添加了一个属性,使其可供扫描在之后找到它。

Example

配置修饰和扫描调用共同称为声明式配置。以下代码使用声明式方法配置应用注册表。

scan() 函数发现路由及其映射的视图,因此需要添加命令式配置语句。

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

@view_config(route_name='hello', request_method='GET')
def hello_world(request):
   return Response('Hello World!')

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

扫描器将 view_config 的参数翻译为对 pyramid.config.Configurator.add_view() 方法的调用,因此,该操作等同于以下语句:

config.add_view(hello_world, route_name='hello', request_method='GET')

Output

运行上述程序之后,WSGI 服务器启动。当浏览器访问链接 [role="bare"] [role="bare"]http://localhost:6543/ 时,依然会渲染“Hello World”信息。

config