3.2 获取前端输入
下面几节主要讲解tornado.web.RequestHandler。
回想一下,利用HTTP协议向服务器传参有几种途径?
- 查询字符串(query string),形如key1=value1&key2=value2;
- 请求体(body)中发送的数据,比如表单数据、json、xml;
- 提取uri的特定部分,如/blogs/2016/09/0001,可以在服务器端的路由中用正则表达式截取;
- 在http报文的头(header)中增加自定义字段,如X-XSRFToken=itcast。
我们现在来看下tornado中为我们提供了哪些方法来获取请求的信息。
1. 获取查询字符串参数
从请求的查询字符串中返回指定参数name的值,如果出现多个同名参数,则返回最后一个的值。
default为设值未传name参数时返回的默认值,如若default也未设置,则会抛出tornado.web.MissingArgumentError异常。
strip表示是否过滤掉左右两边的空白字符,默认为过滤。
get_query_arguments(name, strip=True)
从请求的查询字符串中返回指定参数name的值,注意返回的是list列表(即使对应name参数只有一个值)。若未找到name参数,则返回空列表[]。
strip同前,不再赘述。
2. 获取请求体参数
get_body_argument(name, default=_ARG_DEFAULT, strip=True)
从请求体中返回指定参数name的值,如果出现多个同名参数,则返回最后一个的值。
default与strip同前,不再赘述。
get_body_arguments(name, strip=True)
从请求体中返回指定参数name的值,注意返回的是list列表(即使对应name参数只有一个值)。若未找到name参数,则返回空列表[]。
strip同前,不再赘述。
说明
对于请求体中的数据要求为字符串,且格式为表单编码格式(与url中的请求字符串格式相同),即key1=value1&key2=value2,HTTP报文头Header中的"Content-Type"为application/x-www-form-urlencoded 或 multipart/form-data。对于请求体数据为json或xml的,无法通过这两个方法获取。
3. 前两类方法的整合
get_argument(name, default=_ARG_DEFAULT, strip=True)
从请求体和查询字符串中返回指定参数name的值,如果出现多个同名参数,则返回最后一个的值。
default与strip同前,不再赘述。
get_arguments(name, strip=True)
从请求体和查询字符串中返回指定参数name的值,注意返回的是list列表(即使对应name参数只有一个值)。若未找到name参数,则返回空列表[]。
strip同前,不再赘述。
说明
对于请求体中数据的要求同前。 这两个方法最常用。
用代码来看上述六中方法的使用:
from tornado import web, ioloop, httpserver, options from tornado.options import options, define define("port", default=8080, type=int) class IndexHandler(web.RequestHandler): def post(self): query_arg = self.get_query_argument("a") query_args = self.get_query_arguments("a") body_arg = self.get_body_argument("a") body_args = self.get_body_arguments("a", strip=False) arg = self.get_argument("a") args = self.get_arguments("a") default_arg = self.get_argument("b", "itcast") default_args = self.get_arguments("b") try: missing_arg = self.get_argument("c") except Exception as e: missing_arg = str(e) missing_args = self.get_arguments("c") print(f'query_arg:{query_arg}\n' f'query_args:{query_args}\n' f'body_arg:{body_arg}\n' f'body_args:{body_args}\n' f'arg:{arg}\n' f'args:{args}\n' f'default_arg:{default_arg}\n' f'default_args:{default_args}\n' f'missing_arg:{missing_arg}\n' f'missing_args:{missing_args}') self.write('it is test get_input') if __name__ == '__main__': options.parse_command_line() app = web.Application( [(r"/", IndexHandler)], ) http_server = httpserver.HTTPServer(app) http_server.listen(options.port) ioloop.IOLoop.current().start() """ PostMan访问结果: query_arg:22 query_args:['11', '22'] body_arg:4 body_args:[' 3', '4'] arg:4 args:['11', '22', '3', '4'] default_arg:itcast default_args:[] missing_arg:HTTP 400: Bad Request (Missing argument c) missing_args:[] """
标签:body,name,get,tornado,args,使用,default,arg From: https://www.cnblogs.com/tslam/p/17968633