栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python web框架: Tornado

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/994960.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号