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使用Supervisor来管理进程的方法
May 28 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
May 25 Python
Mac中Python 3环境下安装scrapy的方法教程
Oct 26 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
​如何愉快地迁移到 Python 3
Apr 28 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
python使用hdfs3模块对hdfs进行操作详解
Jun 06 Python
python判断变量是否为列表的方法
Sep 17 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
Python带你从浅入深探究Tuple(基础篇)
May 15 Python
Python pandas读取CSV文件的注意事项(适合新手)
Jun 20 Python
python 闭包函数详细介绍
Apr 19 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
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
php mongodb操作类 带几个简单的例子
2016/08/25 PHP
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
jQuery判断指定id的对象是否存在的方法
2015/05/22 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
图文详解JavaScript的原型对象及原型链
2016/08/02 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
微信小程序 确认框的实现(附代码)
2019/07/23 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
Vue源码分析之Vue实例初始化详解
2019/08/25 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
Python3内置模块random随机方法小结
2019/07/13 Python
python selenium 查找隐藏元素 自动播放视频功能
2019/07/24 Python
Python统计分析模块statistics用法示例
2019/09/06 Python
Anaconda详细安装步骤图文教程
2020/11/12 Python
python 简单的调用有道翻译
2020/11/25 Python
详解解决jupyter不能使用pytorch的问题
2021/02/18 Python
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
HTML5表单验证特性(知识点小结)
2020/03/10 HTML / CSS
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
打架检讨书500字
2014/01/29 职场文书
成人继续教育实施方案
2014/03/01 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
迎国庆演讲稿
2014/09/05 职场文书
个人四风问题对照检查材料
2014/10/01 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
婚前保证书范文
2015/02/28 职场文书
大学生暑假实习总结
2015/07/13 职场文书