【问题标题】:POST query in Tornado with multiple parameters在 Tornado 中使用多个参数进行 POST 查询
【发布时间】:2015-09-16 10:42:51
【问题描述】:

代码:

class Telegram(tornado.web.RequestHandler):
    def my_f(self,number):
        return number


    def get(self,number):
        self.write( self.my_f(number))

application = tornado.web.Application([
    (r"/number/(.*?)", Telegram),
    ])

使用这段代码,我可以触发 Telegram,为它提供 (.*?) 部分的内容。

问题是:我需要进行 POST 查询,例如: /number/messenger=telegram&phone=3332223332211

这样我就可以获取信使参数和电话参数,并使用提供的电话号码触发正确的类(例如带有 3332223332211 的电报)

【问题讨论】:

    标签: python post tornado


    【解决方案1】:

    POST 请求(通常)有一个正文,因此如果您想要 URL 中的所有内容,您可能需要 GET 而不是 POST。

    传递参数的正常方式是对它们进行形式编码。它以? 开头,如下所示:/number?messenger=telegram&phone=12345。要在 Tornado 中使用这样的参数,请使用 self.get_argument("messenger") 而不是 get() 方法的参数。

    传递参数的第二种方法是将它们放在 URL 的“路径”部分,不带问号。这是当您在路由模式中使用(.*?)get() 的参数时。当您出于某种原因(通常是美学)想要避免问号时使用它。

    您也可以将两者结合起来:像在此处所做的那样在 URL 中传递 messenger 参数,然后添加 ?number=12345 并使用 get_argument。但除非你真的很在意你的 URL 是什么样子,否则我推荐第一种形式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-07
      相关资源
      最近更新 更多