Python Pyramid - 应用配置



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

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

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

Configurator 类定义了以下重要的用于自定义应用程序的方法:

add_route()

此方法注册用于 URL 调度的路由。使用以下参数:

  • name − 第一个必需的位置参数必须是路由的唯一名称。在注册视图或生成 URL 时,使用名称来标识路由。

  • pattern − 第二个必需的位置参数是一个字符串,表示 URL 路径,该路径可以选择包含用于从 URL 解析变量数据的变量占位符。占位符用花括号括起来。例如,“/students/{id}”。

  • request_method − 值可以是“GET”、“POST”、“HEAD”、“DELETE”、“PUT”之一。只有此类型的请求才会与路由匹配。

add_view()

此方法向应用程序注册表添加视图配置。它将视图函数绑定到配置中存在的route_name。所需的参数为:

  • view − 视图函数的名称。

  • route_name − 一个字符串,必须与路由配置声明的名称匹配。

  • request_method − 表示 HTTP REQUEST_METHOD 的字符串(例如“GET”、“POST”、“PUT”、“DELETE”、“HEAD”或“OPTIONS”),或包含一个或多个这些字符串的元组。

add_static_view()

此方法添加用于呈现静态资源(如图像和 CSS 文件)的view,并使用以下参数:

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

  • 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 提供了另一种配置方法,称为声明式配置。

声明式配置

有时,用命令式代码进行配置会很困难,尤其是在应用程序代码分散在许多文件中的情况下。声明式配置是一种便捷的方法。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() 函数添加一个属性,使其稍后可供扫描程序查找。

示例

配置装饰和扫描调用的组合统称为声明式配置。以下代码使用声明式方法配置应用程序注册表。

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()

扫描程序将参数转换为对 pyramid.config.Configurator.add_view() 方法的调用,因此该操作等效于以下语句:

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

输出

运行上述程序后,WSGI 服务器启动。当浏览器访问链接 https://:6543/ 时,“Hello World”消息将像以前一样呈现。

Config
广告
© . All rights reserved.