Tornado的同步API写法举例实现GET/POST/DELETE请求+Tornado获取post请求中的json数据(转载)
下面的实验主要来自[1][2],但是对实验2的代码进行了修改,修改过程参考了[3]
#---------------------------------------------------实验1-------------------------------------------------------------------
from tornado.web import Application, RequestHandler
from tornado.ioloop import IOLoopclass HelloHandler(RequestHandler):def get(self):self.write({'message': 'hello world'})def make_app():urls = [("/", HelloHandler)]return Application(urls, debug=True)if __name__ == '__main__':app = make_app()app.listen(3000)IOLoop.instance().start()
python test1.py
**************************************************************
GET请求测试:
浏览器打开http://127.0.0.1:3000/
GET请求结果:
#---------------------------------------------------实验2-----------------获取post请求中的json数据--------------------------------------------------
from tornado.web import Application, RequestHandler
from tornado.ioloop import IOLoop
import json
items = ['csdn']class TodoItems(RequestHandler):def get(self):self.write({'items': items})class TodoItem(RequestHandler):def post(self):# items.append(self.request.body)print("-----------------进入post----------------")print(self.request)print("--------------self.write之前------------------")jsonbyte = self.request.bodyjsonstr = jsonbyte.decode('utf8') #解码,二进制转为字符串print('Json字符串:', jsonstr)jsonobj = json.loads(jsonstr) #将字符串转为json对象# self.write({'message': self.request.body})self.write(jsonobj)def make_app():urls = [("/", TodoItems),("/api/item/", TodoItem)]return Application(urls, debug=True)if __name__ == '__main__':app = make_app()app.listen(3000)IOLoop.instance().start()
python test2.py
**************************************************************
GET请求测试:
浏览器打开:
http://127.0.0.1:3000/
GET请求结果:
**************************************************************
POST请求测试:
curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://127.0.0.1:3000/api/item/"
POST请求结果:
{"user_id": "123", "coin": 100, "success": 1, "msg": "OK!"}
#----------------------------------------实验3-----------------------------curl发送delete请求---------------------------------------------------------
from tornado.web import Application, RequestHandler
from tornado.ioloop import IOLoop
import jsonitems = []class TodoItems(RequestHandler):def get(self):self.write({'items': items})class TodoItem(RequestHandler):def post(self, _):items.append(json.loads(self.request.body))self.write({'message': 'new item added'})def delete(self, id):global itemsnew_items = [item for item in items if item['id'] is not int(id)]items = new_itemsself.write({'message': 'Item with id %s was deleted' % id})def make_app():urls = [("/", TodoItems),(r"/api/item/([^/]+)?", TodoItem)]return Application(urls, debug=True)if __name__ == '__main__':app = make_app()app.listen(3000)IOLoop.instance().start()
python test3.py
***********************************************
GET请求测试:
浏览器打开http://127.0.0.1:3000/
GET请求测试结果:
***********************************************
POST请求测试:
curl -H "Content-Type: application/json" -X POST -d '{"user_id": "123", "coin":100, "success":1, "msg":"OK!" }' "http://127.0.0.1:3000/api/item/342"
POST请求测试结果:
{"message": "new item added"}
***********************************************
DELETE请求测试:
curl -v -X DELETE 127.0.0.1:3000/api/item/342
DELETE请求测试结果:
{"message": "Item with id 342 was deleted"}
#---------------------------------------------------------结束--------------------------------------------------------------------------
Reference:
[1]How to build a REST API in Python with Tornado (part 1)
[2]How to build a REST API in Python with Tornado (part 2)
[3]tornado获取客户端以json字符串提交的数据
Tornado的同步API写法举例实现GET/POST/DELETE请求+Tornado获取post请求中的json数据(转载)相关推荐
- 关于vue3的两种API写法——选项API和组合API
理解什么是选项API写法,什么是组合API写法 Options API 什么是选项API写法:Options API 在vue2.x项目中使用的就是选项API写法 代码风格:data选项写数据,met ...
- java json发送文件_关于java:REST API设计在同一请求中将JSON数据和文件发送到api...
我正在现有应用程序之上创建一个RESTAPI.其中一个特性接受JSON数据以及用户上传的文件. 我不确定如何将同一请求中的文件和JSON数据发送到RESTAPI? 我让JSON部件工作,并使用curl ...
- Tornado同步api和异步api混写一例
代码如下: import tornado.ioloop import tornado.web from tornado.httpclient import HTTPClient, AsyncHTTPC ...
- python同步异步_python中Tornado的同步与异步I/O的介绍(附示例)
本篇文章给大家带来的内容是关于python中Tornado的同步与异步I/O的介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 协程是Tornado种推荐的编程方式,使用 ...
- Windows线程同步API
本文主要总结创建.结束线程和WIN32 API提供的一些线程同步方法.同步方法包括用户态同步方式:InterLock.CriticalSection.SRWLock和内核态同步方式:Event.Sem ...
- Zookeeper C 同步 API 介绍
Zookeeper C API 中与访问 Zookeeper 服务相关(比如创建.删除 znode 节点,获取子节点,设置 znode 数据等)的同步 API 如下: ZOOAPI int zoo_a ...
- RPC-非阻塞通信下的同步API实现原理,以Dubbo为例
Netty在Java NIO领域基本算是独占鳌头,涉及到高性能网络通信,基本都会以Netty为底层通信框架,Dubbo 也不例外.以下将以Dubbo实现为例介绍其是如何在NIO非阻塞通信基础上实现同步 ...
- 关于通讯录同步API报错60020,如何配置IP白名单?
起因 最近甲方老是说系统出故障了,企业微信不能在OA上创建新用户了,于是服务器一看日志一直报60020这个错误码,通关官方的查询全局错误码提示如下: 官方文档解释 首先关于微信官方给出的开发文档给出提 ...
- elasticsearch 6.x (五) 单一文档 API 介绍和使用 update和delete API
大家好,我是烤鸭: 今天分享的是官网6.x 单一文档(Single document APIs)APIs. 本文这是部分翻译,如果想看全部的,还是建议阅读官方api.链接: https://ww ...
最新文章
- 函数的重载与 泛型(generic)有什么不同?
- python 命令行参数-python获取命令行参数的方法(汇总)
- WebSocket负载均衡
- The method setOnClickListener(View.OnClickListener) in the type View is not applicable
- 关于hive数仓这个概念的一些理解+查看hive底层引擎是否是tez
- mysql访问类型最好的_【干货满满】最全的MySQL性能指南(一):选择最佳的数据类型...
- Ubuntu 16.04退出anaconda环境
- 经典论坛程序 Discuz! 回归
- 未来科技计算机作文600字,未来科技发展_600字
- VM虚拟机Linux克隆后网卡的相关操作
- SQL 2008下载安装及问题解决
- PHP输出100以内的质数(包括普通写法和数组形式输出)
- 解决IDEA中leetcode插件出现中文乱码问题
- 计算机如何隐藏任务栏的程序,电脑系统教程_电脑如何隐藏任务栏图标
- 淘宝以图搜图接口,图片搜索商品接入指南
- AD19导出bom表的方法(按照元件不同数值分类,重点信息突出)
- 为什么微博超话显示服务器有点累,微博超话帖子被吞是什么原因?使用时,注意这些事项...
- 服务器虚拟化的工作原理,虚拟化技术及其原理
- 面纱星云的西面纱中的女巫帚星云
- 解决数据库日期返回格式不是yyyy-MM-dd HH:mm:ss 的问题
热门文章
- iOS - 打电话, 发短信
- -webkit-gradient webkit内核浏览器的Linear Gradients (线性渐变) -Css3演示
- sdut 2152:Balloons(第一届山东省省赛原题,DFS搜索)
- volatile 和 sig_atomic_t
- 转 .NET 2.0 SqlDependency快速上手指南
- WEB前端 前端开发者 如何突破技术瓶颈
- Vue 响应式原理(双向数据绑定) 怎样实现 响应式原理?
- nginx php mysql 部署_Linux+Nginx+Mysql+Php运维部署
- python中str函数_一文让你彻底搞懂Python中__str__和__repr__?
- react招聘项目——使用cookie实现项目自动登录功能