Tornado异步框架
简介:
- tornado是Python的web框架。
- tornado和主流的web服务器框架有明显的区别:
- 它是非阻塞式服务器,而且速度非常快,得力于其非阻塞的方式和epoll的运用
- tornado可以每秒处理数以千计的连接(号称)
基本配置
1. app文件
- 包含__init__.py文件和视图文件
- init文件是为了让文件变成模块导包使用
import tornado.web
from db.models import UserModelimport os
import sys# 模块导包
base_path = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.append(base_path)
sys.path.append(os.path.join(base_path, "config"))from config.config import SECRET_KEYdef md5(password):import hashlibmd5 = hashlib.md5()password += SECRET_KEYmd5.update(password.encode("utf-8"))sign = md5.hexdigest()return sign# 视图
# tornado视图以Handler结尾
# 视图继承tornado.web.RequestHandler
class UserHandler(tornado.web.RequestHandler):# 由于是异步框架 方法async开头async def get(self):username = self.get_argument("username", None) # None非空校验password = self.get_argument("password")print(username, password)if not all([username, password]):return self.finish({"code": 400,"msg": "数据不能为空"})# 重复校验user = UserModel.select().where(UserModel.username == username)if user:return self.finish({"code": 400,"msg": "用户名已注册"})password = md5(password)print(password)UserModel.create(username=username, password=password)return self.finish({"code": 200,"msg": "注册成功"})# 声明tornado实例
app = tornado.web.Application(# handlers路由 列表形式handlers=[# r非转义字符(r"/", UserHandler),],debug=True
)
- 视图继承tornado.web.RequestHandler
- 接收前端参数self.get_argument("")
- 由于是异步框架 方法用async开头
- 返回值self.finish()
- 声明tornado实例,tornado.web.Application(handlers=[(r"/",视图名)])
- debug=True 自动重启
2. config文件
- 包含init文件和config.py
# 配置文件
MYSQL_HOST = "127.0.0.1"
MYSQL_USER = "root"
MYSQL_PASSWORD = "123456"
MYSQL_PORT = 3306
SECRET_KEY = "njxdsncjnds"
主要是放置一些配置信息
3. db文件
- 包含init文件、db.py、model.py
- db.py主要是连接数据库
- model.py写模型类
db.py
# 连接数据库
import peewee_async
import sys
import os# 从上级目录导入
# sys.path.append("..")# 系统化模块导包
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_path)
sys.path.append(os.path.join(base_path, "config"))from config import configprint(config.MYSQL_HOST)database = peewee_async.PooledMySQLDatabase(database="videosite",user=config.MYSQL_USER,password=config.MYSQL_PASSWORD,host=config.MYSQL_HOST,port=config.MYSQL_PORT
)
- 通过python中的ORM包peewee_async来创建连接数据库
- peewee_async.PooledMysqlDatabase()连接数据库
model.py
from datetime import datetime
import peewee# 设置模块路径
import os
import sys# 设置根路径
# base_dir1 = os.path.abspath(__file__) # 执行文件的路径
# base_dir2 = os.path.dirname(os.path.abspath(__file__)) # 执行文件的上一层
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 执行文件的上上一层print(base_path)
sys.path.append(base_path)
sys.path.append(os.path.join(base_path, "db"))from db.db import database# 创建基类数据库
class BaseModel(peewee.Model):__abstract__ = Trueid = peewee.IntegerField(primary_key=True, unique=True, constraints=[peewee.SQL("AUTO_INCREMENT")])create_time = peewee.DateField(default=datetime.now, verbose_name="创建时间")class Meta:database = databaseclass UserModel(BaseModel):username = peewee.CharField(max_length=128, unique=True)password = peewee.CharField(max_length=128)class Meta:database = database # 指定数据库入口db_table = "user"# if __name__ == '__main__':# 创建表# UserModel.create_table()# UserModel.drop_table(True)# 添加数据库# UserModel.create(username="张三", password="123")
- 创建表是继承peewee.Model
- peewee.Model是父类
- BaseModel继承父类是他的子类
- UserModel继承BaseModel是他们的超类
- 创建表:UserModel.create_table(True)
- 删除表:UserModel.drop_table(True)
- 添加表:UserModel.create()
- 必须指定数据库连接入口:database=database
4. .gitignore文件
- 上传git时不需要上传的文件,保护隐私

5. main.py 入口文件
- 入口文件 整个tornado项目的重点
- 启动项目就是这个文件
# 单一入口文件
import tornado.web# 服务包
from tornado import httpserver# 模块导包
import os
import sysbase_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_path)
sys.path.append(os.path.join(base_path, "app"))from app.user import appif __name__ == '__main__':# 建立服务server = httpserver.HTTPServer(app, xheaders=True)# 打印tornado服务,启动不显示print("Tornado后台服务已启动")# 监听端口 服务.listen(端口号) 端口号随便写server.listen(5050)# 启动tornado.ioloop.IOLoop.instance().start()
- 建立服务要写httpserver.HTTPServer(app,xheaders=True)
- app是tornado实例,xheaders=True
- 监听接口listen(端口号)
- 启动命令tornado.ioloop.IOLoop.instance().start()
6.requmerents.txt
- 项目所需要下载的所有包

其他文件:static tools utils
最后:在终端启动项目命令
python .\main.py相关文章:
Tornado异步框架
简介: tornado是Python的web框架。tornado和主流的web服务器框架有明显的区别:它是非阻塞式服务器,而且速度非常快,得力于其非阻塞的方式和epoll的运用tornado可以每秒处理数以千计的连接(号称) 基本配置 …...
openpnp - error - 吸嘴没下降到板子上, 就将元件松开
文章目录openpnp - error - 吸嘴没下降到板子上, 就将元件松开概述笔记ENDopenpnp - error - 吸嘴没下降到板子上, 就将元件松开 概述 以前用过国内一家openpnp厂家出的设备, 他们家的openpnp是自己改过的. 贴片流程已经走过一遍. 这次还是按照以前记录的笔记, 按照国内那家的…...
【Java】yyyy-MM-dd HH:mm:ss 时间格式 时间戳 全面解读超详细
时间格式 时间格式(协议)描述gg时期或纪元。y不包含纪元的年份。不具有前导零。yy不包含纪元的年份。具有前导零。yyyy包含纪元的四位数的年份。M月份数字。一位数的月份没有前导零。MM月份数字。一位数的月份有一个前导零。MMM月份的缩写名称,在AbbreviatedMonthN…...
快鲸SCRM发布口腔企业私域运营解决方案
口腔企业普遍面临着以下几方面运营痛点问题 1、获客成本居高不下,恶性竞争严重 2、管理系统落后,人员流失严重 3、客户顾虑多、决策时间长 4、老客户易流失,粘性差 以上这些痛点,不得不倒逼口腔企业向精细化运营客户迈进。 …...
Verilog实现组合逻辑电路
在verilog 中可以实现的数字电路主要分为两类----组合逻辑电路和时序逻辑电路。组合逻辑电路比较简单,仅由基本逻辑门组成---如与门、或门和非门等。当电路的输入发生变化时,输出几乎(信号在电路中传递时会有一小段延迟)立即就发生…...
2023前端菜鸟笔试血泪史html5-one--找到工作前都更新
1.说说对html语义化的理解 什么的HTML语义化,顾名思义,HTML语义化就是可以不通过了解HTML的内容,就可以知道这个部分所代表的的意义。 HTML语义化的意义:在使用HTML标签构建页面时,避免大篇幅的使用无语义的标签。 …...
蓝牙调试工具集合汇总
BLE 该部分主要分享一下常用的蓝牙调试工具,方便后续蓝牙抓包及分析。 目录 1 hciconfig 2 hcitool 3 hcidump 4 hciattach 5 btmon 6 bluetoothd 7 bluetoothctl 1 hciconfig 工具介绍:hciconfig,HCI 设备配置工具 命令格式&…...
Java 获取文件后缀名【一文总结所有方法】
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
UML常见图的总结
一、概述 UML:Unified Modeling Language,统一建模语言,支持从需求分析开始的软件开发的全过程。是一个支持模型化和软件系统开发的图形化语言、为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到规格,到…...
WebRTC系列-工具系列之音频相关工具
文章目录 1. audio_util数据格式转换类2. WavFile文件读写类2.1 读取wav文件2.2 写入wav文件这篇文章主要介绍WebRTC中一些音频工具这些,大部分都在 common_audio目录下,这个文件夹下提供音频的大量算法,包括sinc重采样算法,音频数据格式的转换:例如 float转int16_t格式等…...
7 线性回归及Python实现
1 统计指标 随机变量XXX的理论平均值称为期望: μE(X)\mu E(X)μE(X)但现实中通常不知道μ\muμ, 因此使用已知样本来获取均值 X‾1n∑i1nXi.\overline{X} \frac{1}{n} \sum_{i 1}^n X_i. Xn1i1∑nXi.方差variance定义为: σ2E(∣X−μ∣2).\sigma^2 E(|…...
适合小团队协作、任务管理、计划和进度跟踪的项目任务管理工具有哪些?
适合小团队协作、任务管理、计划和进度跟踪的项目任务管理工具有哪些? 大家可以参考这个模板:http://s.fanruan.com/irhj8管理项目归根结底在管理人、物,扩展来说便是: 人:员工能力、组织机制; 物:项目内…...
从100%进口到自主可控,从600块降到10块,中科院攻克重要芯片
前言 2月28日,“20多位中科院专家把芯片价格打到10块”冲上微博热搜,据河南省官媒大象新闻报道,热搜中提到的中科院专家所在企业为全球最大的PLC分路器芯片制造商仕佳光子,坐落于河南鹤壁。 为实现芯片技术自主可控自立自强&#…...
关于git的一些基本点总结
1.什么是git? git是一个常用的分布式版本管理工具。 2.git 的常用命令: clone(克隆): 从远程仓库中克隆代码到本地仓库 checkout (检出):从本地仓库中检出一个仓库分支然后进行修订 add(添加): 在提交前…...
PyTorch保姆级安装教程
1 安装CUDA1.1 查找Nvidia适用的CUDA版本桌面右键,【打开 NVIDIA控制面板】查看【系统信息】查看NVIDIA的支持的CUDA的版本,下图可知支持的版本是 10.11.2 下载CUDACUDA下载官方网址https://developer.nvidia.com/cuda-toolkit-archive找到适合的版本下载…...
MySQL 上亿大表如何优化?
背景XX 实例(一主一从)xxx 告警中每天凌晨在报 SLA 报警,该报警的意思是存在一定的主从延迟。(若在此时发生主从切换,需要长时间才可以完成切换,要追延迟来保证主从数据的一致性)XX 实例的慢查询…...
Git(狂神课堂笔记)
1.首先去git官网下载我们对应的版本Git - Downloading Package (git-scm.com) 2.安装后我们会发现git文件夹里有三个应用程序: Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多 Git CMD:Windows风格的命令行 G…...
「2」指针进阶,最详细指针和数组难题解题思路
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练 🔥座右铭:“不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错…...
云服务器是做什么的?云服务器典型的应用场景介绍
云服务器可能是很多企业以及个人上云用户的必选产品了,但是对于初学者或者非专业的用户来说云服务器还是比较陌生的,它到底是干什么的,如此生活中哪些地方可以接触到,这篇文章将详细的介绍云服务器使用的应用场景以及相关的操作 本…...
【论文随笔】Transfer of temporal logic formulas in reinforcement learning
Zhe Xu and Ufuk Topcu. 2019. Transfer of temporal logic formulas in reinforcement learning. In Proceedings of the 28th International Joint Conference on Artificial Intelligence (IJCAI’19). AAAI Press, 4010–4018. 这是一篇将inference和learning结合起来的文章…...
别再乱配了!华为防火墙+S5700三层交换机组网,这5个坑我帮你踩过了
华为防火墙与S5700三层交换机组网避坑指南:5个致命错误与解决方案 刚接手华为防火墙与S5700三层交换机的组网项目时,我以为按标准模板配置就能万事大吉。直到凌晨三点还在机房排查网络不通的故障,才明白教科书式的配置在实际环境中远远不够。…...
SQLAdvisor终极调优指南:如何根据业务特点优化工具参数
SQLAdvisor终极调优指南:如何根据业务特点优化工具参数 【免费下载链接】SQLAdvisor 输入SQL,输出索引优化建议 项目地址: https://gitcode.com/gh_mirrors/sq/SQLAdvisor SQLAdvisor是由美团点评公司技术工程部DBA团队开发的一款强大的SQL索引优…...
AI率太高被退稿?这5款工具帮你稳过查重+降AI双关!
🔥 2026实测推荐:5款真正管用的工具1️⃣ 毕业之家 AI(毕业季救星)AI率效果:<8%亮点:专为国内高校定制,自动适配学校格式要求,连页眉页脚都不用手调价格:本科套餐199元…...
八位行波进位加法器设计全攻略:从理论到Quartus II实现
八位行波进位加法器设计全攻略:从理论到Quartus II实现 在数字电路设计中,加法器是最基础也是最重要的运算单元之一。无论是简单的计算器还是复杂的CPU,都离不开高效可靠的加法器设计。八位行波进位加法器作为入门级但实用性极强的设计案例&a…...
告别手动画图?聊聊Autoware高精地图那些事:开源工具、格式转换与未来展望
自动驾驶高精地图技术全景:从Autoware工具链到行业实践 当我们在谈论自动驾驶时,"高精地图"始终是绕不开的核心技术支柱。与普通导航地图不同,高精地图需要厘米级精度、丰富的语义信息以及实时更新能力。作为自动驾驶开源生态中的重…...
400字节的前端奇迹:TinyEditor如何重新定义微型代码编辑体验
400字节的前端奇迹:TinyEditor如何重新定义微型代码编辑体验 【免费下载链接】TinyEditor A functional HTML/CSS/JS editor in less than 400 bytes 项目地址: https://gitcode.com/gh_mirrors/ti/TinyEditor 在前端开发的世界里,我们常常被功能…...
typedef用法
将为你介绍typedef 4 种应用方式。应用一、为基本数据类型定义新的类型名用uint32_t替代unsigned int声明变量/* 变量名重定义 */typedef unsigned int uint32_t;/* 定义一个unsigned int类型的变量 */uint32_t count 0;应用二、为自定义数据类型(结构体、共用体和…...
高效掌握开源工具抖音直播录制:从基础搭建到高级应用指南
高效掌握开源工具抖音直播录制:从基础搭建到高级应用指南 【免费下载链接】DouyinLiveRecorder 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveRecorder 一、直播内容捕获工具的核心价值解析 核心价值:实现直播内容自动化捕获与管理&…...
高等数学实战解析:定积分换元法与分部积分法的核心技巧
1. 定积分换元法的实战技巧 第一次接触定积分换元法时,我完全被那些符号变换绕晕了。直到后来在物理实验中遇到一个弹簧振子的能量计算问题,才真正明白这个方法的精妙之处。想象你手里拿着一根橡皮筋,想要测量拉伸它需要的总能量——这就是定…...
不同品牌路由器也能玩桥接?TP-LINK AC1200主路由+FAST FWR303副路由详细配置指南
跨品牌路由器桥接实战:TP-LINK AC1200与FAST FWR303混合组网全解析 现代家庭网络环境中,信号死角问题如同房间角落的灰尘一样难以避免。特别是当房屋结构复杂或面积较大时,单台路由器往往力不从心。此时,利用家中闲置的旧路由器进…...
