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

flask----内置信号的使用/django的信号/ flask-script/sqlalchemy介绍和快速使用/sqlalchemy介绍和快速使用

信号

内置信号的使用

# 第一步:写一个函数
def test(app, **kwargs):print(app)print(type(kwargs))# 请求地址是根路径,才记录日志,其它都不记录print(kwargs['context']['request'].path)if kwargs['context']['request'].path == '/':print('记录日志了')# 第二步:跟内置信号绑定
# signals 中有很多内置信号
signals.before_render_template.connect(test)# 第三步:等待信号被触发(不需要咱们做)--->只要执行到内置信号位置,绑定的函数就会执行

有哪些内置信号

request_started = _signals.signal('request-started')                # 请求到来前执行
request_finished = _signals.signal('request-finished')              # 请求结束后执行before_render_template = _signals.signal('before-render-template')  # 模板渲染前执行
template_rendered = _signals.signal('template-rendered')            # 模板渲染后执行got_request_exception = _signals.signal('got-request-exception')    # 请求执行出现异常时执行request_tearing_down = _signals.signal('request-tearing-down')      # 请求执行完毕后自动执行(无论成功与否)
appcontext_tearing_down = _signals.signal('appcontext-tearing-down')# 应用上下文执行完毕后自动执行(无论成功与否)appcontext_pushed = _signals.signal('appcontext-pushed')            # 应用上下文push时执行
appcontext_popped = _signals.signal('appcontext-popped')            # 应用上下文pop时执行
message_flashed = _signals.signal('message-flashed')                # 调用flask在其中添加数据时,自动触发

自定义信号

# 1 第一步:定义一个自定义 信号
# 2 第二步:写个函数
# 3 第三步:函数跟自己定义信号绑定
# 4 第四步:触发自定义信号---》我们做

 

from flask import Flask, session, render_template, signals
from flask.signals import _signals# pip3 install blinker
app = Flask(__name__)
app.debug = True
app.secret_key = 'asdfasdfasdf'#### 自定义信号---》session每次放一个值,我们就执行信号
# 1 定义信号
# 自定义信号
session_input = _signals.signal('session_input')# 2 写个函数
def test2(*args, **kwargs):print(args)  # appprint(kwargs)  # {session   kk}print('session放值了')if kwargs.get('kk').get('name') == 'xx':print('记录日志')# 3 绑定信号
session_input.connect(test2)# 4 触发信号
@app.route('/')
def index():session['uu'] = '00'session_input.send(app, session=session, kk={'name': 'uu'})return render_template('index.html')@app.route('/home')
def home():return render_template('home.html')@app.route('/order')
def order():session['xx'] = 'xx'session_input.send(app, session=session, kk={'name': 'xx'})return "order"if __name__ == '__main__':app.run(port=8080)

信号的作用(信号量--》Semaphore)

# 对代码进行解耦  # 1 记录日志:只要是张三用户,访问index页面,就记录日志
# 2 只要用户表中,插入一条记录,就给用户发个短信通知User.object.create--->调用发短信方法--》找到10个地址--》改10个地方-如果有个内置信号---》只要表中增加记录,就会触发这个信号----》通过信号内判断这个表是不是User表,决定要不要发短信-flask中没有这个内置信号---》自定义

信号量

# acquire():消耗信号量
# release():释放信号量
import threading
import time
def run(n):semaphore.acquire()  # 计数器获取锁time.sleep(5)  # 程序休眠5秒print (n)semaphore.release()  # 计数器释放锁if __name__ == '__main__':# 添加一个计数器,最大并发线程数量5(最多同时运行5个线程)semaphore = threading.Semaphore(5)for i in range(50):t = threading.Thread(target=run, args=(i, ))  # 创建线程t.start()

django的信号

# 内置信号:#Model signalspre_init                    # django的modal执行其构造方法前,自动触发post_init                   # django的modal执行其构造方法后,自动触发pre_save                    # django的modal对象保存前,自动触发post_save                   # django的modal对象保存后,自动触发pre_delete                  # django的modal对象删除前,自动触发post_delete                 # django的modal对象删除后,自动触发m2m_changed                 # django的modal中使用m2m字段操作第三张表(add,remove,clear)前后,自动触发class_prepared              # 程序启动时,检测已注册的app中modal类,对于每一个类,自动触发
Management signalspre_migrate                 # 执行migrate命令前,自动触发post_migrate                # 执行migrate命令后,自动触发
Request/response signalsrequest_started             # 请求到来前,自动触发request_finished            # 请求结束后,自动触发got_request_exception       # 请求异常后,自动触发
Test signalssetting_changed             # 使用test测试修改配置文件时,自动触发template_rendered           # 使用test测试渲染模板时,自动触发
Database Wrappersconnection_created          # 创建数据库连接时,自动触发# 内置信号使用(当user表创建用户,就给用户发个邮件)1 写个函数   #放到__init__里from django.db.models.signals import pre_saveimport loggingdef callBack(sender, **kwargs):logging.debug('%s创建了一个%s对象'%(sender._meta.model_name,kwargs.get('instance').title))2 绑定内置信号   pre_save.connect(callBack)3 等待触发# 内置信号from django.db.models.signals import pre_savefrom django.dispatch import receiver@receiver(pre_save)def my_callback(sender, **kwargs):print("对象创建成功")print(sender)print(kwargs)# 自定义信号:#1 定义信号(一般创建一个py文件)(toppings,size 是接受的参数)import django.dispatchpizza_done = django.dispatch.Signal(providing_args=["toppings", "size"])# 2 注册信号def callback(sender, **kwargs):print("callback")print(sender,kwargs)pizza_done.connect(callback)
# 3 触发信号from 路径 import pizza_donepizza_done.send(sender='seven',toppings=123, size=456)# 自定义信号干过什么?-做双写一致性的缓存更新

flask-script

# django中,有命令  python manage.py runserverpython manage.py makemigrations...自定制命令(django如何自定制命令)...-python manage.py init_db  excel文件路径  指定表名# flask启动项目,像djagno一样,通过命令启动Flask==2.2.2
Flask_Script==2.0.3#借助于:flask-script 实现-安装:pip3.8 install flask-script-修改代码:from flask_script import Managermanager=Manager(app)manager.run()-用命令启动python38 manage.py runserver# 自定制命令#1  简单自定制命令@manager.commanddef custom(arg):# 命令的代码,比如:初始化数据库, 有个excel表格,使用命令导入到mysql中print(arg)#2 复杂一些的自定制命令@manager.option('-n', '--name', dest='name')@manager.option('-u', '--url', dest='url')def cmd(name, url):# python run.py cmd -n lqz -u xxx# python run.py cmd --name lqz --url uuuprint(name, url)# django 中如何自定制命令

sqlalchemy介绍和快速使用

# orm 框架----》django orm--》只能用在django中,不能独立使用
# python界的orm框架-peewee-sqlalchemy:企业级-djagno rom-Tortoise ORM-GINO# go 界orm框架-gorm  国人写的-Xorm# java界orm框架-ssh 框架springmvc  structs   Hibernate(java的orm框架)-ssh  spring    springmvc   Hibernate-ssm  Spring    SpringMVC    MyBatis (orm框架)-springboot :sb框架 ---》java工程师就是spring工程师-spring cloud# 分层:
Engine,框架的引擎
Connection Pooling ,数据库连接池
Dialect,选择连接数据库的DB API种类(sqlite,mysql...)
Schema/Types,架构和类型
SQL Exprression Language,SQL表达式语言#操作不同数据库
MySQL-Pythonmysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>pymysqlmysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]MySQL-Connectormysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>cx_Oracleoracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html# 了解orm不能创建数据库---》只能创建表,删除表---》sqlalchemy不能增加删除字段--》借助于第三方插件实现

sqlalchemy的原生操作

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.engine.base import Engine# 第一步:创建engine对象
engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/cars?charset=utf8",max_overflow=0,  # 超过连接池大小外最多创建的连接pool_size=5,  # 连接池大小pool_timeout=30,  # 池中没有线程最多等待的时间,否则报错pool_recycle=-1  # 多久之后对线程池中的线程进行一次连接的回收(重置)
)# 第二步:通过engine获得链接
conn=engine.raw_connection()
cursor = conn.cursor()
cursor.execute("select * from news"
)
result = cursor.fetchall()
print(result)
cursor.close()
conn.close()

相关文章:

flask----内置信号的使用/django的信号/ flask-script/sqlalchemy介绍和快速使用/sqlalchemy介绍和快速使用

信号 内置信号的使用 # 第一步&#xff1a;写一个函数 def test(app, **kwargs):print(app)print(type(kwargs))# 请求地址是根路径&#xff0c;才记录日志&#xff0c;其它都不记录print(kwargs[context][request].path)if kwargs[context][request].path /:print(记录日志…...

Zookeeper 面试题

一、ZooKeeper 基础题 1.1、Zookeeper 的典型应用场景 Zookeeper 是一个典型的发布/订阅模式的分布式数据管理与协调框架&#xff0c;开发人员可以使用它来进行分布式数据的发布和订阅。 通过对 Zookeeper 中丰富的数据节点进行交叉使用&#xff0c;配合 Watcher 事件通知机…...

ELK 企业级日志分析系统(二)

目录 ELK Kiabana 部署&#xff08;在 Node1 节点上操作&#xff09; 1&#xff0e;安装 Kiabana 2&#xff0e;设置 Kibana 的主配置文件 3&#xff0e;启动 Kibana 服务 4&#xff0e;验证 Kibana 5&#xff0e;将 Apache 服务器的日志&#xff08;访问的、错误的&#x…...

Linux版本 centOS 7,java连接mysql

在Linux下 使用java 访问数据库 &#xff0c; java 1.7版本&#xff0c; mysql 8.0.33版本&#xff0c; 连接驱动 mysql-connector-java-5.1.49.jar 代码如下&#xff1a; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import ja…...

开发工具IDEA的下载与初步使用【各种快捷键的设置,使你的开发事半功倍】

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于IDEA的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.IDEA的简介以及优势 二.IDEA的下载 1.下…...

YoloV5/YoloV7优化:感受野注意力卷积运算(RFAConv),效果秒杀CBAM和CA等 | 即插即用系列

💡💡💡本文改进:感受野注意力卷积运算(RFAConv),解决卷积块注意力模块(CBAM)和协调注意力模块(CA)只关注空间特征,不能完全解决卷积核参数共享的问题 RFAConv| 亲测在多个数据集能够实现大幅涨点,有的数据集达到3个点以上 💡💡💡Yolov5/Yolov7魔术师…...

freeswitch的mod_xml_curl模块动态获取configuration

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 mod_xml_curl模块支持从web服务获取xml配置&#xff0c;本文介绍如何动态获取acl配置。 环境 centos&#xff1a;CentOS release 7.0 (Final)或以上版本 freeswitch&#xff1a;v1.6.20 GCC&#xff1a;4.8.5 web…...

CANdelaStudio 使用介绍

CANdela Studio使用_哔哩哔哩_bilibili 一.CANdelaStudio使用tips 1.开始菜单打开软件&#xff0c;避免软件字体是德文的 2.打开软件之后&#xff0c;用“Open”打开.cdd或者.cddt文件&#xff0c;不要双击文件打开&#xff0c;这样容易报错 3.查看软件版本信息 4.只有Admin版…...

锚框【动手学深度学习】

生成多个锚框 假设输入图像高为h,宽为w,我们以图像每个像素为中心生成不同形状的锚框,缩放比 s∈(0,1],宽高比为r>0。那么锚框的宽度和高度分别为和。当中心位置给定时, 已知宽和高的锚框是确定的。缩放比为锚框高与图像高的比值,然后得到一个正方形锚框面积。 ​​…...

Qt扫盲-Qt Model/View 理论总结 [上篇]

Qt Model/View 理论总结 [上篇] 一、概述1.model / view 架构2. Model3. View4. Delegate5. 排序6. 快捷类 二、使用model/view1. Qt包含两种 model2. 在现有 model 中使用 view 三、Model 类1. 基本概念1.model 索引2. 行和列2. item 的父 item3. Item roles4. 总结 2. 使用mo…...

【猿灰灰赠书活动 - 01期】- 【Python网络爬虫入门到实战】

说明&#xff1a;博文为大家争取福利&#xff0c;与机械工业出版社合作进行送书活动 图书&#xff1a;《Python网络爬虫入门到实战》 一、好书推荐 图书介绍 本书介绍了Python3网络爬虫的常见技术。首先介绍了网页的基础知识&#xff0c;然后介绍了urllib、Requests请求库以及X…...

小兔鲜项目 uniapp (1)

目录 项目架构 uni-app小兔鲜儿电商项目架构 小兔鲜儿电商课程安排 创建uni-app项目 1.通过HBuilderX创建 2.通过命令行创建 pages.json和tabBar案例 uni-app和原生小程序开发区别 用VS Code开发uni-app项目 拉取小兔鲜儿项目模板代码 基础架构–引入uni-ui组件库 操…...

盛弘电气2021秋招笔试题

笔试时间:2020.09.16,60分钟 宣讲会后直接笔试,若通过会有两轮面试,7-15 天出结果。 题型:简答题8道,每题5分,共40分。编程题4道,每题15分,共60分。 公司介绍:公司现阶段主要产品为充电桩,专注于电力电子技术控制电能,交直流变换。 薪资待遇:本科8-15K,研究生…...

Poco框架(跨平台自动化测试框架)

Poco基于UI控件搜索原理 &#xff0c;适用于Android、iOS原生和各种主流的游戏引擎应用。 中文官方文档&#xff1a;欢迎使用Poco (ポコ) UI自动化框架 — poco 1.0 文档 参考文档&#xff1a; Poco介绍 - Airtest Project Docs 环境准备 安装库&#xff1a;pip install po…...

使用RANSAC算法在点云中拟合原始3D形状:pyRANSAC-3D的介绍和应用

随机样本共识(RANSAC)是一种强大的算法,用于从数据集中估计数学模型的参数,特别是在数据包含大量异常值时。在3D计算机视觉中,RANSAC常用于从点云数据中拟合原始形状,例如平面、长方体和圆柱体。本文将介绍一个名为pyRANSAC-3D的开源库,它提供了RANSAC算法的Python实现,…...

GPT-3.5 人工智能还是人工智障?——西红柿炒钢丝球!!

人工智能还是人工智障&#xff1f;——西红柿炒钢丝球 西红柿炒钢丝球的 基本信息西红柿炒钢丝球的 详细制作方法材料步骤 备注幕后花絮。。。。。。。。。关于GPT-3.5&#xff0c;你的看法&#xff1a; 西红柿炒钢丝球的 基本信息 西红柿炒钢丝球是一道具有悠久历史的传统中式…...

移动技术相关基本概念

信息网络隔离装置 一种能够保障企业信息网络安全的高级网络设备&#xff0c;主要作用是隔离内外网&#xff0c;阻隔外界攻击&#xff0c;保护企业网络不遭受黑客攻击、木马病毒入侵、信息泄露等安全威胁。同时还能对企业内部的流量进行监视&#xff0c;保护企业敏感数据不被内…...

数学建模—分类模型

本讲将介绍分类模型。对于而分类模型&#xff0c;我们将介绍逻辑回归&#xff08;logistic regression&#xff09;和Fisher线性判别分析两种分类算法&#xff1b;对于多分类模型&#xff0c;我们将简单介绍Spss中的多分类线性判别分析和多分类逻辑回归的操作步骤下。 本题按水…...

腾讯云SA3服务器AMD处理器CPU网络带宽性能详解

腾讯云AMD服务器SA3实例CPU采用2.55GHz主频的AMD EPYCTM Milan处理器&#xff0c;睿频3.5GHz&#xff0c;搭载最新一代八通道DDR4&#xff0c;内存计算性能稳定&#xff0c;默认网络优化&#xff0c;最高内网收发能力达1900万pps&#xff0c;最高内网带宽可支持100Gbps。腾讯云…...

Vue组件之间的传值汇总

组件之间的传值 1、父传子 props 2、父传子 slot 3、父传子 不建议用 attrs 4、 子传父 ref 5、子传父 emit 6、povide/inject只能在setup的时候用。 7、利用vuex和pinia去实现数据的交互 1、实现代码App.vue <script setup>import TestProps from ./components/T…...

【从零学习JVM|第二篇】字节码文件

前言&#xff1a; 通过了解字节码文件可以帮助我们更容易的理解JVM的工作原理&#xff0c;所以接下来&#xff0c;我们来介绍一下字节码文件。 目录 前言&#xff1a; 正确的打开字节码文件 字节码文件组成 1. 魔数&#xff08;Magic Number&#xff09; 2. 版本号&…...

C语言指针与数组sizeof运算深度解析:从笔试题到内存原理

前两天跟着数组指针的教程&#xff1a; // #self 视频里的笔试题 !!!vipint b12[3][4] {0};printf("%ld \n", sizeof(b12[0]));printf("%ld \n", sizeof(*b12));printf("%ld \n", sizeof(*(b12 1)));printf("%ld \n", sizeof(*(&am…...

html - <mark>标签

<mark> 标签在HTML中用于高亮显示文本&#xff0c;通常用于突出显示某些重要的部分。它的默认样式通常是背景色为黄色&#xff0c;但你可以通过CSS自定义其外观。 1. 基本用法 <mark> 标签用于标记文本的高亮显示。它常用于搜索结果中&#xff0c;突出显示匹配的…...

wsl开启即闪退

[ 问题 ]&#xff1a; 在一次电脑卡住&#xff0c;强制关机重启后&#xff0c;遇到打开WSL就闪退的问题在CMD中打开WSL&#xff0c;出现如上图的描述&#xff1a; C:\Users\admin>wsl wsl: 检测到 localhost 代理配置&#xff0c;但未镜像到 WSL。NAT 模式下的 WSL 不支持…...

安科瑞防逆流方案落地内蒙古中高绿能光伏项目,筑牢北疆绿电安全防线

一、项目概况 内蒙古阿拉善中高绿能能源分布式光伏项目&#xff0c;位于内蒙古乌斯太镇&#xff0c;装机容量为7MW&#xff0c;采用自发自用、余电不上网模式。 用户配电站为35kV用户站&#xff0c;采用两路电源单母线分段系统。本项目共设置12台35/0.4kV变压器&#xff0c;在…...

12.vite,webpack构建工具

&#x1f63a;&#x1f63a; &#x1f63a;1.vite 介绍和对比 &#x1f3f7;️ Vite 是什么&#xff1f; &#x1f449; Vite 是一个 前端构建工具 开发服务器&#xff0c; 可以帮你&#xff1a; • 开发阶段&#xff1a;秒开项目&#xff0c;改代码能瞬间热更新&#xff08;…...

ORACLE 修改端口号之后无法启动?

Oracle数据库更改端口后出现监听器无法启动的问题确实较为常见&#xff0c;但并非必然发生。这一问题通常源于​​配置错误或环境冲突​​&#xff0c;而非端口修改本身。以下是系统性解决方案&#xff1a; &#x1f50d; ​​一、问题根源分析​​ ​​配置文件语法错误​​ 修…...

GAN优化与改进:从条件生成到训练稳定性

摘要 本文聚焦生成对抗网络&#xff08;GAN&#xff09;的核心优化技术与改进模型。系统解析 条件生成对抗网络&#xff08;CGAN&#xff09; 的可控生成机制、深度卷积GAN&#xff08;DCGAN&#xff09; 的架构创新&#xff0c;揭示GAN训练崩溃的本质原因&#xff0c;并介绍W…...

Git 常见操作

目录 1.git stash 2.合并多个commit 3. git commit -amend (后悔药) 4.版本回退 5.merge和rebase 6.cherry pick 7.分支 8.alias 1.git stash git-stash操作_git stash 怎么增加更改内容-CSDN博客 2.合并多个commit 通过git bash工具交互式操作。 1.查询commit的c…...

工作邮箱收到钓鱼邮件,点了链接进去无法访问,会有什么问题吗?

没事的&#xff0c;很可能是被安全网关拦截了。最近做勒索实验&#xff0c;有感而发&#xff0c;不要乱点击邮箱中的附件。 最初我们采用钓鱼邮件投递恶意载荷&#xff0c;发现邮件网关把我们的 exe/bat 程序直接拦截了&#xff0c;换成压缩包也一样拦截了&#xff0c;载荷始终…...