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 相关文章推荐
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
部署Python的框架下的web app的详细教程
Apr 30 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
Feb 10 Python
对Python 语音识别框架详解
Dec 24 Python
python交换两个变量的值方法
Jan 12 Python
python将视频转换为全字符视频
Apr 26 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
django模板获取list中指定索引的值方式
May 14 Python
Python getattr()函数使用方法代码实例
Aug 10 Python
教你利用python实现企业微信发送消息
May 23 Python
C站最全Python标准库总结,你想要的都在这里
Jul 03 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
黑夜路人出的几道php笔试题
2009/08/04 PHP
PHP魔术引号所带来的安全问题分析
2014/07/15 PHP
php生成验证码函数
2015/10/20 PHP
php测试kafka项目示例
2020/02/06 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
js克隆对象、数组的常用方法介绍
2013/09/26 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
JS实现仿QQ效果的三级竖向菜单
2015/09/25 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
jquery if条件语句的写法
2016/05/19 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
javascript 显示全局变量与隐式全局变量的区别
2017/02/09 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
layui 实现table翻页滚动条位置保持不变的例子
2019/09/05 Javascript
[01:19:33]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第一场 2月2日
2021/03/11 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
深入理解Python中变量赋值的问题
2017/01/12 Python
取numpy数组的某几行某几列方法
2018/04/03 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
美国家居装饰网上商店:Lulu & Georgia
2019/09/14 全球购物
英国买鞋网站:Charles Clinkard
2019/11/14 全球购物
什么是反射
2012/03/17 面试题
高二生物教学反思
2014/01/27 职场文书
迅雷Cued工作心得体会
2014/01/27 职场文书
开办大学饮食联盟创业计划书
2014/01/29 职场文书
小班重阳节活动方案
2014/02/08 职场文书
公务员培的训心得体会
2014/09/01 职场文书
党支部遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
庆祝儿童节标语
2014/10/09 职场文书
2022年四月新番
2022/03/15 日漫
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记