Python Pyramid 应用配置

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文件)的视图,并使用以下参数-

  • 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”消息如之前一样被渲染。

Python Pyramid 应用配置

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程