【问题标题】:pyramid_handlers not working金字塔处理程序不工作
【发布时间】:2013-02-11 01:16:47
【问题描述】:

我目前正在将一个项目从 Pylons 1.0 转移到 Pyramid。

到目前为止,我的问题是如何在 Pyramid 中使用宁静的路线。我目前正在使用 pyramid_handlers 因为这似乎是一个好的开始。我正在使用Akhet。

所以这是我路线中的两条重要线路:

config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts")
# or 
config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new")

我的行动:

@action(name="new_account", renderer='accounts/new.mako', request_method='GET')

错误:

 TypeError: 'Accounts' object is not callable
 or
 ValueError: Could not convert view return value "{}" into a response Object.

帐户...到目前为止一切顺利,很容易理解,pyramid_handlers 似乎没有正常注册或处理名称... request.matched_route 中说的,我确实有“new_account”。

如果我在路由定义中添加“action='new'”,它会找到函数但不会监听动作定义。换句话说,它将无法找到渲染器并期望响应对象。 request_method 参数实际上还没有做任何事情,所以删除它不会改变任何结果。

简而言之,@action(name="..." 不起作用。 Pyramid 无法自行找到函数,如果定义了函数名称,则无法执行操作语句。

不知道我做错了什么。

正确的做法。

config.add_handler("new_account", "/accounts/new", "sproci2.handlers.accounts:Accounts", action="new_account")

编辑

route_name 可能会被 url 生成器函数使用。而 action 是 @action 中的实际名称。据我了解,@action 名称是 route_name 而不是动作名称。这现在更有意义了。

【问题讨论】:

    标签: python pyramid restful-architecture akhet


    【解决方案1】:

    add_handler 的调用需要一个动作模式。因此,要么将 {action} 添加到 url 模式,要么将 action= 设置为参数。这些操作必须与 @action 装饰器中定义的名称匹配。在您的示例中,您将操作命名为new_account,但您使用new 的操作调用了add_handler。因此它们没有正确连接。

    【讨论】:

    • 我期待不同的行为.. 动作中的名称将是必须匹配的路由,而不是必须匹配的动作.. 它可能进入了正确的新函数,因为它是我调用的方式它。但是期待一个 ResponseObject,因为“新”没有在任何 @action 中定义......现在这很有意义。
    猜你喜欢
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2023-03-24
    • 2021-06-26
    • 2014-06-14
    • 2011-06-22
    • 2017-10-15
    相关资源
    最近更新 更多