【问题标题】:Tornado - What is the difference between RequestHandler's get_argument(), get_query_argument() and get_body_argument()?Tornado - RequestHandler 的 get_argument()、get_query_argument() 和 get_body_argument() 有什么区别?
【发布时间】:2016-04-21 12:21:27
【问题描述】:

何时使用RequestHandler.get_argument()RequestHandler.get_query_argument()RequestHandler.get_body_argument()

它们各自的用例是什么?

在这些情况下,request.bodyrequest.argument 还能做什么?哪些会用在哪些场景?

还有,还有request.query 或类似的东西吗?

【问题讨论】:

    标签: python http-headers tornado httpresponse http-request


    【解决方案1】:

    大多数 HTTP 请求将额外参数(例如表单值)存储在以下两个位置之一:URL(以 ?foo=bar&spam=eggs query string 的形式)或请求正文(使用 POST request and either the application/x-www-form-urlencoded or multipart/form-data mime type 时)。

    Request.get_query_argument() 查找 URL 参数,RequestHandler.get_body_argument() 让您检索 POST 正文中设置的参数。 RequestHandler.get_argument() 方法检索正文或 URL 参数(按此顺序)。

    当您明确不关心参数来自哪里并且您的端点同时支持 GET 和 POST 参数时,您可以使用 Request.get_argument()。否则,请使用其他方法之一,以明确参数的来源。

    Request.get_*_argument 方法使用 request.body_argumentsrequest.query_arguments 值(request.arguments 是它们的集合),解码为 Unicode。 request.body 是未解码、未解析的原始请求正文;是的,有一个等效的 self.query 包含来自 URL 的查询字符串。

    【讨论】:

    • @martin-pieters 谢谢马丁。第二部分呢? request.body 和 request.argument 有什么区别?有没有 request.query?
    • @AnirbanRoyDas:抱歉,错过了,现在添加。
    • 终于搞定了。我添加了另一个问题,如果您有时间请看stackoverflow.com/questions/34821740/…
    • @JasonXie 没有 JSON 支持,没有。查询和POST参数可以出现多次(foo=42&foo=81); get_*_arguments() 返回一个包含给定参数的所有值的列表,get_*_argument() 如果有多个值,则只返回最后一个值。
    • 哇,这在我阅读的文档中一点也不明显,所以谢谢你。如果只有查询参数的名称不那么通用。
    猜你喜欢
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    • 2023-04-01
    • 2012-09-30
    • 2015-05-08
    • 2017-05-03
    • 2011-02-01
    • 1970-01-01
    相关资源
    最近更新 更多