【问题标题】:(How) can I pass POST arguments from one cherrypy page class to another?(如何)我可以将POST参数从一个cherrypy页面类传递给另一个?
【发布时间】:2011-04-08 17:37:34
【问题描述】:

按照 Cherrypy 的tutorial,从页面类“内”的表单接收数据似乎相当容易。现在,我尝试将参数传递给 另一个 页面类的索引页面,如下所示:

在我的根索引页面中,我有以下表单:

<form action="otherpage" method="post">
    <input type="text" name="arg1"> 
    ... 
</form>

而接收页面的类是这样的:

class OtherPage:
   def index(self, arg1=None):
      return arg1

它的安装方式像

root.otherpage = Otherpage()

无论我在表单中输入什么,它总是显示一个空白页面,所以我猜它没有正确传递参数“arg”。你看出什么问题了吗?

【问题讨论】:

    标签: post cherrypy


    【解决方案1】:

    当您提交“otherpage”请求时,CherryPy 会尝试使用您的 Otherpage.index 方法来处理请求。但是,发生了两件事:

    1. 默认情况下,trailing slash Tool 处于打开状态,具有以下默认值:trailing_slash(missing=True, extra=False, status=None, debug=False)。这意味着,如果您请求的 URI otherpage?arg1=foo 缺少尾部斜杠,那么 CherryPy 将添加尾部斜杠并将客户端重定向到请求 otherpage/?arg1=foo。请注意(因为 'extra' 参数默认为 False)反之则不正确:otherpage/ 不会重定向到 otherpage
    2. 然而,还有一个额外的问题,因为请求是 POST 而不是 GET。 CherryPy 引发 303 或 302 重定向(取决于您的客户端支持的 HTTP 版本),这可能不是您想要重定向 POST 的内容。有关完整讨论,请参阅 http://docs.cherrypy.org/dev/refman/_cperror.html#redirecting-post

    您应该:

    1. 如果可以,请在 HTML 中添加尾部斜杠,
    2. 在配置中设置tools.trailing_slash.missing = False(在这种情况下,我相信索引方法只会提供资源而无需重定向,或者
    3. 如果您可以控制客户端行为,请为尾部斜杠工具提供更合适的“状态”参数。

    【讨论】:

      【解决方案2】:

      今天第一次尝试 CherryPy,遇到了完全相同的问题。我认为 Otherpage 匹配不正确,因为生成的 URI 缺少尾部斜杠。

      试试

      <form action="otherpage/" method="post">
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-01
        • 2011-04-14
        • 1970-01-01
        相关资源
        最近更新 更多