Python Pyramid 应用程序配置
Pyramid应用程序对象有一个应用程序注册表,用于存储视图函数与路由的映射,以及其他特定应用程序的组件注册。配置器类被用来建立应用注册表。
配置器的生命周期是由一个返回应用程序对象的上下文管理器管理的。
with Configurator(settings=settings) as config:
#configuration methods
app = config.make_wsgi_app()
配置器类定义了以下重要的方法来定制应用程序 —
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文件,并使用以下参数—-。
- 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 “的信息会像以前一样呈现。