tornado获取GET,POST请求的参数,返回json数据 您所在的位置:网站首页 tornado返回文件 tornado获取GET,POST请求的参数,返回json数据

tornado获取GET,POST请求的参数,返回json数据

2023-09-25 22:35| 来源: 网络整理| 查看: 265

本文以get请求和post请求为例,讲解tornado如何获取GET,POST 请求参数,如何获取json数据并返回json数据

1. 获取get请求参数

tornado使用get_argument方法获取get请求的参数,该方法定义如下

def get_argument( # noqa: F811 self, name: str, default: Union[None, str, _ArgDefaultMarker] = _ARG_DEFAULT, strip: bool = True, ) -> Optional[str]: pass

你可以设置default参数默认值,如果get请求没有传对应的参数则返回定义的默认值。

import tornado.ioloop from tornado.web import RequestHandler, Application from tornado.httpserver import HTTPServer from tornado.options import options, define define('port', default=8000, help='监听端口') class HelloHandler(RequestHandler): def get(self): name = self.get_argument('name') age = self.get_argument('age') city = self.get_argument('city', default='beijing') self.write(f'{name} is {age} years old, he comes from {city}') if __name__ == '__main__': options.parse_command_line() handlers_routes = [ (r'/', HelloHandler) ] app = Application(handlers=handlers_routes) http_server = HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.current().start()

在浏览器里请求 http://127.0.0.1:8000/?name=kwsy&age=14, 得到的结果

kwsy is 14 years old, he comes from beijing

请求里没有city参数,city取default参数所设置的值。

有时,你可能希望以一种简单的办法获取所有的请求参数,而不是有多少个参数就调用多少次get_argument方法,get请求的参数值都以字典形式存储在self.request.arguments中,你可以遍历这个字典

class HelloHandler(RequestHandler): def get(self): query_data = {} for key in self.request.arguments.keys(): query_data[key] = self.get_argument(key) self.write(query_data)

同样的请求,浏览器里显示的结果是

{"name": "kwsy", "age": "14"} 2. 获取post请求数据,并返回json数据

post请求,其数据格式多为form和json, 先来看form格式的post请求数据。

客户端代码:

import requests data = { 'name': 'kwsy', 'age': 14 } res = requests.post('http://127.0.0.1:8000', data=data) print(res.text)

服务端代码:

class HelloHandler(RequestHandler): def post(self): name = self.get_argument('name') age = self.get_argument('age') self.write(f'{name} is {age} years old')

哎,你没看错,获取post请求的数据,也可以用get_argument,get_argument技能从get请求的query参数里获取数据,也能从post请求的body里获取数据。

实际上,get请求,和post请求都有自己专用的方法,get请求的专用方法是get_query_argument, post请求的专用方法是get_body_argument,而get_argument则是通用的。

但对于json格式的post数据,则不能使用get_argument方法,而是需要直接获取body转为json数据。客户端代码:

import requests data = { 'name': 'kwsy', 'age': 14 } res = requests.post('http://127.0.0.1:8000', json=data) print(res.text)

服务端代码

import json class HelloHandler(RequestHandler): def post(self): data = json.loads(self.request.body) self.write(data)

tornado返回json数据不需要做任何处理,只需要使用self.write方法或者self.finish方法直接返回字典就可以,torando框架自己会将字典转为json数据,这一点可以从代码里找到证据

def write(self, chunk: Union[str, bytes, dict]) -> None: # other codes if isinstance(chunk, dict): chunk = escape.json_encode(chunk) self.set_header("Content-Type", "application/json; charset=UTF-8") chunk = utf8(chunk)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有