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实现用户登陆邮件通知的方法
Jul 09 Python
Python选课系统开发程序
Sep 02 Python
Python os.access()用法实例
Feb 18 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
详解Python self 参数
Aug 30 Python
PHP统计代码行数的小代码
Sep 19 Python
Django实现网页分页功能
Oct 31 Python
PyCharm刷新项目(文件)目录的实现
Feb 14 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
Python实现灰色关联分析与结果可视化的详细代码
Mar 25 Python
如何利用python实现Simhash算法
Jun 28 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代码
2013/12/03 PHP
ThinkPHP实现ajax仿官网搜索功能实例
2014/12/02 PHP
WordPress网站性能优化指南
2015/11/18 PHP
PHPCMS忘记后台密码的解决办法
2016/10/30 PHP
TinyMCE 新增本地图片上传功能
2010/11/05 Javascript
简洁Ajax函数处理(示例代码)
2013/11/15 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
js鼠标点击按钮切换图片-图片自动切换-点击左右按钮切换特效代码
2015/09/02 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
js最简单的双向绑定实例讲解
2018/01/02 Javascript
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
详解浏览器缓存和webpack缓存配置
2018/07/06 Javascript
一文了解vue-router之hash模式和history模式
2019/05/31 Javascript
ES6 Iterator接口和for...of循环用法分析
2019/07/31 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
微信小程序实现购物车代码实例详解
2019/08/29 Javascript
js实现小时钟效果
2020/03/25 Javascript
JavaScript进阶(三)闭包原理与用法详解
2020/05/09 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
JS常见内存泄漏及解决方案解析
2020/05/30 Javascript
Python打包文件夹的方法小结(zip,tar,tar.gz等)
2016/09/18 Python
Python 创建空的list,以及append用法讲解
2018/05/04 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
python3爬取torrent种子链接实例
2020/01/16 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
HTML5手机端弹出遮罩菜单特效代码
2016/01/27 HTML / CSS
BIBLOO捷克:购买女装、男装、童装、鞋和配件
2017/01/27 全球购物
英国天然有机美容护肤品:Neal’s Yard Remedies
2018/05/05 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
单位法定代表人授权委托书
2014/09/20 职场文书
党组织领导班子整改方案
2014/10/25 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang