当前位置: 首页 > news >正文

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. Xn1​i1∑n​Xi​.方差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结合起来的文章…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

前端调试HTTP状态码

1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...

python读取SQLite表个并生成pdf文件

代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...