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()
该方法添加了一个view用于渲染图片和CSS文件等静态资源,并使用以下参数 −
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_name 和 request_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()
扫描器将 view_config 的参数转换为对 pyramid.config.Configurator.add_view() 方法的调用,因此该操作等同于以下语句 −
config.add_view(hello_world, route_name='hello', request_method='GET')
输出
以上程序运行后,WSGI服务器启动。 当浏览器访问链接 http://localhost:6543/ 时,"Hello World"消息像以前一样呈现。