• Python Tornado搭建高并发Restful API接口服务


    Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快能实现高并发。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。Tornado不同于其他python web框架,它是一个服务器,部署非常简单。

    开发环境搭建:

    1.Python3.7
    2.Tornado 6.02

    依赖包:

    1. peewee-async(异步数据库引擎)
    2. aiofiles(异步读写文件)
    3. Wtforms(表单)

    项目组织结构:

    类似于Django,由多个独立app构成:
    在这里插入图片描述

    数据库模型

    使用peewee提供的ORM,编写数据库基类,默认添加两个字段,添加时间和更新时间,如下:

    from peewee import *
    from datetime import datetime
    
    class BaseModel(Model):
        add_time = DateTimeField(default=datetime.now, verbose_name="添加时间", help_text='添加时间')
        update_time = DateTimeField(default=datetime.now, verbose_name='更新时间', help_text='更新时间')
    
        def save(self, *args, **kwargs):
            if self._get_pk_value() is None:
                self.add_time = datetime.now().strftime(
                    "%Y-%m-%d %H:%M:%S")
            self.update_time = datetime.now().strftime(
                "%Y-%m-%d %H:%M:%S")
    
            return super(BaseModel, self).save(*args, **kwargs)
    

    模型的设计类似于Django的ORM,在每个app中新建一个models.py文件,编写对应的数据表。

    集成peewee-async实现异步CRUD操作

    将peewee-async的manager绑定到全局的app变量中,并设置不允许同步

    if __name__ == '__main__':
        app = web.Application(
            urlpatterns,
            debug=True,
            **settings
        )
        app.listen(8888)
        objects = Manager(db)
    
        db.set_allow_sync(False)
        app.objects = objects
        ioloop.IOLoop.current().start()
    

    编写Handler

    在这里插入图片描述
    所有自己写的handler都要继承RequestHandler,这里能实现的方法如下:
    在这里插入图片描述可以实现所有HTTP请求,注意要加上async,因为是异步的。

    class CategoryHandler(web.RequestHandler):
    	async def get(self, *args, **kwargs):
    		#实现GET逻辑
    		return {}
    	
    	async def post(self, *args, **kwargs):
    		#实现post逻辑
    		pass
    

    设计urls映射关系

    在这里插入图片描述

    测试API

    使用postman工具进行测试
    get -> /categories/
    如图所示,JSON结构类似于djangorestframework,符合restful规范。
    在这里插入图片描述

  • 相关阅读:
    web服务器-Apache
    nginx优化
    nginx下载限速
    nginx-URL重写
    HDU 5358 First One 求和(序列求和,优化)
    HDU 5360 Hiking 登山 (优先队列,排序)
    HDU 5353 Average 糖果分配(模拟,图)
    UVALive 4128 Steam Roller 蒸汽式压路机(最短路,变形) WA中。。。。。
    HDU 5348 MZL's endless loop 给边定向(欧拉回路,最大流)
    HDU 5344 MZL's xor (水题)
  • 原文地址:https://www.cnblogs.com/PyKK2019/p/10777137.html
Copyright © 2020-2023  润新知