(如何)我可以将POST参数从一个cherrypy页面类传递给另一个页面类?

时间:2011-04-08 17:37:34

标签: post cherrypy

在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”。你看到了什么问题吗?

2 个答案:

答案 0 :(得分:3)

当您提交'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'arg默认为False)反之则不然:otherpage/不会重定向到otherpage
  2. 然而,还有一个额外的皱纹,因为请求是POST而不是GET。 CherryPy引发303或302重定向(取决于您的客户端支持的HTTP版本),这可能不是您想要重定向POST的内容。有关完整讨论,请参阅http://docs.cherrypy.org/dev/refman/_cperror.html#redirecting-post
  3. 你应该:

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

答案 1 :(得分:1)

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

尝试

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