Python web框架: Tornado

1.Tornado

中文文档https://tornado-zh.readthedocs.io/zh/latest/

  • Tornado:python编写的web服务器兼web应用框架

1.Tornado的优势

  • 轻量级web框架
  • 异步非阻塞IO处理方式
  • 出色的抗负载能力
  • 优异的处理性能,不依赖多进程/多线程,一定程度上解决C10K问题
  • WSGI全栈替代产品,推荐同时使用其web框架和HTTP服务器

2.Tornado VS Django

  • Django:重量级web框架,功能大而全,注重高效开发
  • 内置管理后台
  • 内置封装完善的ORM操作
  • session功能
  • 后台管理
  • 缺陷:高耦合
  • Tornado:轻量级web框架,功能少而精,注重性能优越
  • HTTP服务器
  • 异步编程
  • WebSocket
  • 缺陷:入门门槛较高

2.安装

输入命令:

pip install tornado

备注:
Tornado应该运行在类Unix平台,为了达到最佳的性能和扩展性,仅推荐Linux和BSD(充分利用Linux的epoll工具和BSD的kqueue达到高性能处理的目的)

3.使用

1.Tornado入门程序 

db.py

# 数据库工具类
import peewee
import peewee_async

from datetime import datetime

# 创建数据库链接对象

database = peewee_async.PooledMySQLDatabase("scoial", host="127.0.0.1",
                                            port=3306, user="root", password="123456")

# 基类
class BaseModel(peewee.Model):
    id = peewee.IntegerField(primary_key=True, unique=True, constraints=
    [peewee.SQL('AUTO_INCREMENT')])

    # 入库时间
    create_time = peewee.DateTimeField(default=datetime.now,
                                       help_text="入库时间")

    # 重写父类方法
    def save(self, *args, **kwargs):
        # 判断什么时候赋值入库方法
        if self._pk is None:
            # 赋值
            self.create_time = datetime.now()
        return super(BaseModel, self).save(*args, **kwargs)

    class Meta:
        # 传递数据库连接
        database = database


# 用户表
class UserModel(BaseModel):
    email = peewee.CharField(null=False, unique=True, max_length=100)

    password = peewee.CharField(null=False, max_length=567)

    state = peewee.IntegerField(null=False, default=0)

    class Meta:
        # 声明表明
        db_table = "user"


if __name__ == '__main__':
    # 创建表
    UserModel.create_table(True)
    # 删除表
    # UserModel.drop_table(True)
    # 添加测试数据

 main.py

import tornado.ioloop
import tornado.web
import redis
# 导入基础类
from base import BaseHandler

# 导入数据库操作类
from db import database

import os

from tornado.options import define, options
define('port', default=8000, help='default port',type=int)

import peewee_async
# import aioredis
import asyncio

# 导入用户模块
import user

# 设置tornado静态文件夹目录
static_path = os.path.join(os.path.dirname(__file__),"static")

class TestHandler(BaseHandler):

	async def get(self):

		self.finish({"msg":"hello Tornado"})

# 集成路由
urlpatterns = [(r'/',TestHandler)]

urlpatterns += (user.urlpatterns)

app = tornado.web.Application(

	handlers=urlpatterns,static_path=static_path,debug=True
)

# 将数据库连接注入到事件循环中
app.objects = peewee_async.Manager(database)
app.redis = redis.Redis(password='123',decode_responses=True)

# 将异步redis链接注入到事件循环
# async def redis_pool(loop):
#
# 	return await aioredis.create_redis_pool('localhost',minsize=1,
# 											maxsize=1000,encoding='utf8',loop=loop)
#
# loop = asyncio.get_event_loop()
# app.redis = loop.run_until_complete(redis_pool(loop))

# app.objects = peewee_async.Manager(database)


if __name__ == "__main__":
	print("开启服务")
	tornado.options.parse_command_line()
	app.listen(options.port)
	tornado.ioloop.IOLoop.instance().start()
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值