Python对Tornado请求与响应的数据处理


Posted in Python onFebruary 12, 2020

获取查询字符串参数

get_query_argument(name, default=_ARG_DEFAULT, strip=True)

从请求的查询字符串中返回指定参数name的值,如果出现多个同名参数,则返回最后一个的值;

default为路由中未传name参数时返回的默认值,如default未设置,则会抛出tornado.web.MissingArgumentError异常;

strip表示是否过滤掉左右两边的空白字符,默认为过滤。

get_query_arguments(name, strip=True)

从请求的查询字符串中返回指定参数name的值,注意返回的是list列表(即使对应name参数只有一个值),若未找到name参数,则返回空列表。

获取请求体数据

get_body_argument(name, default=_ARG_DEFAULT, strip=True)

从请求体中返回指定参数name的值,如出现多个同名参数,则返回最后一个的值;

default与strip同上。

get_body_arguments(name, strip=True)

从请求体中返回指定参数name的值,注意返回的是list列表(即使对应name参数只有一个值),若未找到name参数,则返回空列表。

说明:对于请求体中数据为json或xml的,无法通过这两个方法获取。

前两类方法的整合

get_argument(name, default=_ARG_DEFAULT, strip=True)

get_arguments(name, strip=True)

说明:对于请求体中数据为json或xml的,无法通过这两个方法获取。

这两个方法最常用

获取请求体中的json或xml数据

body_json = self.request.body

body_dict = json.loads(body_json)

需要先判断请求体的数据是否为 application/json 格式:

if self.reuqest.headers.get("Content-Type", "").startswith("application/json"):
try:
  # 防止请求头内容是application/json,实际内容不是json数据
  body_dict = json.loads(self.request.body)
except Exception as e:
  logger({"message": e})
    body_dict = dict()

正则提取uri中的参数

第一种是未命名的方式,按照匹配顺序进行传递:

...
def get(self, subject, city):
 
...
(r"/subject/(.+)/(.+)", SubjectCityHandler),
...

第二种是以命名的方式进行传递:

...
def get(self, city, date):
 
...
(r"/subject/(?P<date>.+)/(?P<city>.+)", SubjectCityHandler),
...

Tornado的Request对象属性

属性 说明
self.request.method  http的请求头;get, post等
self.reuqest.uri  客户端请求完整的uri
self.request.path  uri的路径名,不包含查询的字符串
self.request.query uri中的查询字符串
self.request.version http/1.1
self.request.headers 请求头
self.requset.body 字符串的消息
self.request.remote_ip 客户端请求的ip
self.request.protocol http的协议http or https
self.request.host 请求消息的主机名
self.request.files 以字典的方式表达客户端上传的文件
self.request.cookies 客户端的cookies字典
self.request.arguments  客户端提交的参数
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options # 新导入的options模块
 
tornado.options.define("port", default=8000, type=int, help="服务器监听端口号")
tornado.options.define("content", default=[], type=str, multiple=True, help="控制台输出内容")
 
class IndexHandler(tornado.web.RequestHandler):
  """主路由处理类"""
  def get(self):
    self.write("Hello World!")
    self.write("\n-------method:\n")
    self.write(self.request.method)
    self.write("\n-------uri:\n")
    self.write(self.request.uri)
    self.write("\n-------path:\n")
    self.write(self.request.path)
    self.write("\n-------query:\n")
    self.write(self.request.query)
    self.write("\n-------version:\n")
    self.write(self.request.version)
    self.write("\n-------headers['Accept-Language']:\n")
    self.write(self.request.headers["Accept-Language"])
    self.write("\n-------body:\n")
    self.write(self.request.body)
    self.write("\n-------remote_ip:\n")
    self.write(self.request.remote_ip)
    self.write("\n-------protocol:\n")
    self.write(self.request.protocol)
    self.write("\n-------host:\n")
    self.write(self.request.host)
    self.write("\n-------arguments:\n")
    self.write(self.request.arguments)
    self.write("\n-------query_arguments:\n")
    self.write(self.request.query_arguments)
    self.write("\n-------body_arguments:\n")
    self.write(self.request.body_arguments)
    self.write("\n-------files:\n")
    self.write(self.request.files)
    self.write("\n-------cookies:\n")
    self.write(self.request.cookies)
    self.write("\n")
 
  #自定义settings
settings = {
  "template_path":"templates",
  "static_path":"statics",
}
 
if __name__ == "__main__":
  tornado.options.parse_config_file("./config")
  print(tornado.options.options.content) # 控制台输出内容
 
  app = tornado.web.Application([
    (r"/", IndexHandler),
  ],debug=True,**settings)
 
  http_server = tornado.httpserver.HTTPServer(app)
  http_server.listen(tornado.options.options.port)

更多关于Python对Tornado请求与响应的数据处理方法请查看下面的相关链接

Python 相关文章推荐
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
Dec 03 Python
python 实现删除文件或文件夹实例详解
Dec 04 Python
python操作MySQL 模拟简单银行转账操作
Sep 27 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
python中的print()输出
Apr 12 Python
django formset实现数据表的批量操作的示例代码
Dec 06 Python
Python调用shell命令常用方法(4种)
May 11 Python
python获取linux系统信息的三种方法
Oct 14 Python
Python文件名匹配与文件复制的实现
Dec 11 Python
Python编写万花尺图案实例
Jan 03 Python
Python Pygame实现俄罗斯方块
Feb 19 Python
手把手教你怎么用Python实现zip文件密码的破解
May 27 Python
在PyCharm中实现添加快捷模块
Feb 12 #Python
Python的赋值、深拷贝与浅拷贝的区别详解
Feb 12 #Python
解决pyCharm中 module 调用失败的问题
Feb 12 #Python
Python写出新冠状病毒确诊人数地图的方法
Feb 12 #Python
pycharm通过ssh连接远程服务器教程
Feb 12 #Python
python日期与时间戳的各种转换示例
Feb 12 #Python
Python使用uuid库生成唯一标识ID
Feb 12 #Python
You might like
PHP4 与 MySQL 交互使用
2006/10/09 PHP
分享下PHP register_globals 值为on与off的理解
2013/09/26 PHP
PHP多态代码实例
2015/06/26 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
PHP用户验证和标签推荐的简单使用
2016/10/31 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
js实现简单图片拖拽效果
2021/02/22 Javascript
Python中shutil模块的学习笔记教程
2017/04/04 Python
python文件名和文件路径操作实例
2017/09/29 Python
Python处理命令行参数模块optpars用法实例分析
2018/05/31 Python
对numpy中shape的深入理解
2018/06/15 Python
用python实现k近邻算法的示例代码
2018/09/06 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
亚瑟士美国官网:ASICS美国
2017/02/01 全球购物
Space NK英国站:英国热门美妆网站
2017/12/11 全球购物
阿联酋航空假期:Emirates Holidays
2018/03/20 全球购物
优秀志愿者事迹材料
2014/02/03 职场文书
给老师的一封建议书
2014/03/13 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
农民工工资发放承诺书
2014/03/31 职场文书
内勤主管岗位职责
2014/04/03 职场文书
2015年教研员工作总结
2015/05/26 职场文书
机器人瓦力观后感
2015/06/12 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python