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 Web服务器Tornado使用小结
May 06 Python
Python FTP操作类代码分享
May 13 Python
python获取指定目录下所有文件名列表的方法
May 20 Python
Python中的super()方法使用简介
Aug 14 Python
python爬虫入门教程--优雅的HTTP库requests(二)
May 25 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
django 取消csrf限制的实例
Mar 13 Python
python 绘制场景热力图的示例
Sep 23 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 Python
详解Golang如何实现支持随机删除元素的堆
Sep 23 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
Session的工作方式
2006/10/09 PHP
PHP中for循环语句的几种变型
2006/11/26 PHP
由php if 想到的些问题
2008/03/22 PHP
php文件缓存类用法实例分析
2015/04/22 PHP
获取HTML DOM节点元素的方法的总结
2009/08/21 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
JavaScript中数组去除重复的三种方法
2016/04/22 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
使用bootstrap-paginator.js 分页来进行ajax 异步分页请求示例
2017/03/09 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
layui radio性别单选框赋值方法
2018/08/15 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
详谈vue中router-link和传统a链接的区别
2020/07/22 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
Python 正则表达式操作指南
2009/05/04 Python
基于python编写的微博应用
2014/10/17 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
python实现银行管理系统
2019/10/25 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
Django重设Admin密码过程解析
2020/02/10 Python
python如何随机生成高强度密码
2020/08/19 Python
有个性的自我评价范文
2013/11/15 职场文书
人力资源专业推荐信
2013/11/29 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
2014年社团工作总结范文
2014/11/27 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
Nginx Rewrite使用场景及配置方法解析
2021/04/01 Servers
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS
交互式可视化js库gojs使用介绍及技巧
2022/02/18 Javascript
动画《新网球王子 U-17 WORLD CUP》希腊队PV公开
2022/04/02 日漫
python 实现图片特效处理
2022/04/03 Python
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers