Tornado - RequestHandler 的 get_argument()、get_query_argument() 和 get_body_argument() 之间有什么区别?

Tornado - What is the difference between RequestHandler's get_argument(), get_query_argument() and get_body_argument()?

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

它们各自的用例是什么?

还有 request.bodyrequest.argument 在这些情况下做了什么?在什么场景下使用?

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

大多数 HTTP 请求在以下两个位置之一存储额外参数(例如,表单值):URL(以 ?foo=bar&spam=eggs query string), or in the request body (when using a 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.

的查询字符串