【问题标题】:How to properly configure routes at Pyramid Framework?如何在 Pyramid Framework 中正确配置路由?
【发布时间】:2016-07-04 14:48:45
【问题描述】:

我想注册一个请求处理程序,但不想使用扫描方法。

为什么我需要同时调用两个方法(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()

【问题讨论】:

  • 对于“简单路由”,请参阅 websauna.org/docs/api/… - 这还没有为 Pyramid 核心打包,但如果您有多个路由,您可能会受到启发。

标签: pyramid


【解决方案1】:

(1) 如果在 Pyramid 中使用 @view_config 装饰器,则必须使用 config.scan()。 (这是声明式配置。)请参阅Adding View Configuration Using the @view_config Decorator

或者,您可以使用config.add_view() 使用命令式配置。见Adding View Configuration Using add_view()

(2) 也许你应该问,“为什么我想用一个声明来配置我的路由和视图?”这样做可以防止您将多个视图分配给单个路线。节省一行代码的便利也有其弊端。

在 Pyramid 中,分别声明路由和视图允许您将多个视图分配给单个路由。例如,为同一路由分配一个视图用于 GET 请求,另一个用于 POST 请求。作为一个好处,它使创建 RESTful API 变得不那么繁重。有关详细信息,请参阅 Pyramid 文档,Pyramid Introduction - View predicates and many views per route

【讨论】:

  • “这样做会阻止您将多个视图分配给单个路由。”虽然这是真的,但大多数用例都不需要这样做。对于最小化代码行的“不要重复自己”的解决方案,请参阅websauna.org/docs/api/…
  • 然而,simple_route 作为 装饰器 并非没有 Pyramid design defense 中讨论的缺点
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多