post接受json tornado_Tornado框架的学习与使用

Tornado是一个Python Web框架,擅长处理长连接和高并发。其核心包括tornado.web的RequestHandler、tornado.ioloop的IO循环以及tornado.web.Application。在实际工程中,常常与motor、pymongo等数据库库结合使用,并利用async/await进行异步操作。本文还将介绍Tornado的工程搭建和数据库交互。
摘要由CSDN通过智能技术生成

Tornado是一个Python Web框架和异步网络库,最初由FriendFeed开发。通过使用非阻塞网络I / O,Tornado可以扩展到成千上万的开放连接,使其非常适合长时间polling、Socket和其他需要与每个用户建立长期连接的应用程序。

1、Tornado核心

(1)tornado.web:tornado的基础web框架

RequestHandler:封装对请求处理的所有信息和处理方法

get/post/..:封装对应的请求方式

write():封装响应信息,写响应信息的一个方法

(2)tornado.ioloop:核心io循环模块, tornado高性能处理的核心。

current()返回当前线程的IOLoop实例对象

start()启动IOLoop实力对象的IO循环,开启监听

(3)tornado.web.Application:组成Web应用程序的请求处理程序的集合。此类的实例是可调用的,可以直接传递给HTTPServer来为应用程序提供服务。

(4)tornado.gen 基于生成器的协程。
这个是需要在RequestHandler的各类请求中使用gen.coroutine修饰器,然后里面通过yield生成器来执行请求以得到异步返回。客户端一般使用非阻塞HTTP客户端,在tornado中提供了这样的客户端,如tornado.httpclient.AsyncHTTPClient。

总体来说:

Python2:

@coroutine
def post(self):
    data = tornado.escape.utf8(self.request.body)
    logger.info('Data is %s' % data)
    data = json.loads(data)
    response = yield async_send_post(data)

Python3:(建议使用,async,await为Python3.5版本后自带的关键字,但也可使用@coroutine)

class CoroutineSleepHandler(RequestHandler):
    async def get(self):
        for i in range(5):
            print(i)
            await gen.sleep(1)

2、Tornado工程使用流程图

c38506f10b763c5501afa15bbe1b1162.png

3、常见的搭配库

motor

Motor提供了一个基于协程的API,用于从Tornado或asyncio无阻塞访问MongoDB 。

pymongo

PyMongo是一个Python发行版,其中包含用于MongoDB的工具 ,并且是从Python使用MongoDB的推荐方式。

tormysql

提出了基于Future的API和Greenlet,用于对MySQL的非阻塞访问。

psycopg2

是Python语言的PostgreSQL数据库接口

SqlAlchemy:python ORM框架

ORM,对象关系映射,即Object Relational Mapping的简称,通过ORM框架将编程语言中的对象模型与数据库的关系模型建立映射关系,这样做的目的:简化sql语言操作数据库的繁琐过程(原生sql的编写及拼接等),转而直接使用对象模型来操作数据库做替代。

cx_Oracle

连接oracle数据库使用的第三方库文件cx_Oracle

4、工程使用

(1)建立handlers

handlers = [(r"/zhihuwenda/v1.0/user/numbers", StudentCardHandler),  # XXX接口
            (r"/zhihuwenda/v2.0/user/numbers", StudentCardHandlerV2),  # XXX接口
            (r"/zhihuwenda/v1.0/user/set_study_time", SetStudyTimeHandler),  # XXX接口
            (r"/zhihuwenda/v1.0/user/get_location", GetLocationHandler),  # XXX接口
            (r"/zhihuwenda/v1.0/user/fence_create", FenceCreateHandler),  # XXX接口
            (r"/zhihuwenda/v1.0/user/fence_delete", FenceDeleteHandler), # XXX接口
            (r"/zhihuwenda/v1.0/user/fence_search", FenceSearchHandler)   # XXX接口]

(2)各类数据库的交互

(3)部署

def main():
    app = make_app()
    app.listen(8888)
    IOLoop.current().start()

if __name__ == '__main__':
    main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值