当前位置: 首页 > 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结合起来的文章…...

如何选择Windows图片查看器?这款开源图像浏览器让你不再纠结

如何选择Windows图片查看器?这款开源图像浏览器让你不再纠结 【免费下载链接】ImageGlass 🏞 A lightweight, versatile image viewer 项目地址: https://gitcode.com/gh_mirrors/im/ImageGlass 还在为Windows自带的图片查看器功能简陋而烦恼&…...

Onekey Steam清单下载工具:快速获取游戏清单的完整指南

Onekey Steam清单下载工具:快速获取游戏清单的完整指南 【免费下载链接】Onekey Onekey Steam Depot Manifest Downloader 项目地址: https://gitcode.com/gh_mirrors/one/Onekey Onekey是一款专业的开源Steam Depot清单下载工具,能够直接连接Ste…...

办公效率翻倍!OpenClaw AI 数字员工实操教程

适配系统:Windows 10 64位(新手专享版) 产品亮点: 零门槛安装:无需命令行操作,免去复杂环境配置即开即用:解压即安装,内置完整运行环境可视化操作:全程图形界面&#x…...

量子纠缠与动态电路:CHSH不等式在NISQ时代的应用

1. 量子纠缠与CHSH不等式:动态电路性能评估在量子计算领域,高质量的量子纠缠是实现量子优势的关键资源。就像建筑需要坚固的钢筋骨架一样,量子算法依赖于稳定的纠缠态作为其计算基础。然而在当前的NISQ(Noisy Intermediate-Scale …...

从0到1:产品经理如何构建高效的产品管理体系

现如今,在数字化浪潮把全球都给席卷的这种状况之下,产品已然变成了企业竞争的核心载体。对于一个优秀的产品来讲,其背后通常是没办法离开一套科学且高效的产品管理体系的。产品管理,它作为连接用户需求、商业目标以及技术实现的枢…...

集装箱箱号与ISO代码区域检测数据集VOC+YOLO格式887张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):887标注数量(xml文件个数):887标注数量(txt文件个数):887标注类别数&…...

STL转STEP格式转换终极指南:5分钟掌握专业3D模型转换技巧

STL转STEP格式转换终极指南:5分钟掌握专业3D模型转换技巧 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 你是否曾经遇到过这样的困扰?精心设计的3D打印模型在STL格式下…...

如何快速实现碧蓝航线全自动托管:智能脚本Alas终极指南

如何快速实现碧蓝航线全自动托管:智能脚本Alas终极指南 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 还在为碧…...

别急着升级Android Studio!手把手教你降级AGP 8.3.0-alpha01到8.1.3,解决版本不兼容报错

别急着升级Android Studio!手把手教你降级AGP 8.3.0-alpha01到8.1.3,解决版本不兼容报错 接手一个Kotlin项目时,最令人头疼的莫过于刚打开就遭遇版本不兼容的红色报错。尤其当错误提示显示"项目使用了不兼容的Android Gradle插件版本(A…...

会议记录差点搞砸,直到遇见这个“录音转文字”神器

上周三下午,我差点因为一场两小时的跨部门评审会被老板“请喝茶”。事情是这样的:作为产品经理,我负责主持一场涉及技术、运营、销售三方的季度复盘会。会上大家争论激烈,我一边控场一边记笔记,结果手忙脚乱——技术总…...