POST 在 Tornado 中使用多个参数进行查询
POST query in Tornado with multiple parameters
代码:
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=电报&phone=3332223332211
这样我就可以获取 messenger 参数和 phone 参数,并使用提供的 phone 号码触发正确的 class(就像 Telegram 的 3332223332211)
POST 请求(通常)有一个正文,所以如果您想要 URL 中的所有内容,您可能需要 GET 而不是 POST.
传递参数的正常方法是对它们进行形式编码。它以 ?
开头,看起来像这样:/number?messenger=telegram&phone=12345
。要在 Tornado 中使用这样的参数,您可以使用 self.get_argument("messenger")
而不是 get()
方法的参数。
第二种传递参数的方式是将它们放在URL的"path"部分,不带问号。这是当您在路由模式中使用 (.*?)
和 get()
的参数时。当您出于某种原因(通常是美观)想要避免问号时使用此选项。
您也可以将两者结合起来:像您在此处所做的那样在 URL 中传递 messenger 参数,然后添加 ?number=12345
并使用 get_argument
。但是除非你真的关心你的 URL 长什么样,否则我推荐第一种形式。
代码:
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=电报&phone=3332223332211
这样我就可以获取 messenger 参数和 phone 参数,并使用提供的 phone 号码触发正确的 class(就像 Telegram 的 3332223332211)
POST 请求(通常)有一个正文,所以如果您想要 URL 中的所有内容,您可能需要 GET 而不是 POST.
传递参数的正常方法是对它们进行形式编码。它以 ?
开头,看起来像这样:/number?messenger=telegram&phone=12345
。要在 Tornado 中使用这样的参数,您可以使用 self.get_argument("messenger")
而不是 get()
方法的参数。
第二种传递参数的方式是将它们放在URL的"path"部分,不带问号。这是当您在路由模式中使用 (.*?)
和 get()
的参数时。当您出于某种原因(通常是美观)想要避免问号时使用此选项。
您也可以将两者结合起来:像您在此处所做的那样在 URL 中传递 messenger 参数,然后添加 ?number=12345
并使用 get_argument
。但是除非你真的关心你的 URL 长什么样,否则我推荐第一种形式。