我想注册一个请求处理程序,但不想使用扫描方法.
为什么我需要调用两个方法(add_route和add_view)而不是一个?
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(name='home')
def home(request):
return Response('Welcome!')
def add_view(config, handler, name, path):
config.add_route(name, path)
config.add_view(handler, name=name)
if __name__ == '__main__':
config = Configurator()
add_view(config, home, 'home', '/')
app = config.make_wsgi_app()
server = make_server('0.0.0.0', 8080, app)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
(1)如果在Pyramid中使用@view_config装饰器,则必须使用config.scan().(这是声明性配置.)请参阅使用@view_config装饰器添加视图配置.
或者,您可以使用命令式配置config.add_view().请参阅使用add_view()添加视图配置.
(2)也许你应该问,"为什么我要用一个声明来配置我的路线和视图?" 这样做可以防止您为单个路径分配多个视图.保存一行代码的便利性有其缺点.
在金字塔中,单独声明路径和视图允许您将多个视图分配给单个路径.例如,为同一路由为GET请求分配一个视图,为POST请求分配另一个视图.作为一方的好处,它使创建RESTful API变得更加繁琐.有关更多信息,请参阅金字塔文档,金字塔简介 - 查看谓词和每个路径的许多视图.