首页 > 其他分享 >flask信号

flask信号

时间:2023-04-10 11:45:11浏览次数:52  
标签:__ 触发 flask django signals 信号

信号

Flask框架中的信号基于第三方模块,其主要就是让开发者可是在flask请求过程中定制一些用户行为 ,flask 和django都有信号

安装模块

blinker(安装这个模块 pip install blinker)

使用场景

# 比如:用户表新增一条记录,就记录一下日志
	-方案一:在每个增加后,都写一行代码  ---》后期要删除,比较麻烦
    -方案二:使用信号,写一个函数,绑定内置信号,只要程序执行到这,就会执行这个函数
    

flask 中的内置信号

# 内置信号: flask少一些,django多一些
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.等待触发

from flask import Flask, render_template,session
from flask import signals
from flask.signals import _signals
app = Flask(__name__)


app.secret_key ='sadasd2q1'
# 1.写个函数
def test(*args, **kwargs):
    print(args, kwargs)
    print('我执行了')

# 2.信号绑定
signals.before_render_template.connect(test)
# 3.等待信号触发

@app.route('/')
def index():
    return render_template('user.html')


if __name__ == '__main__':
    app.run()

自定义信号使用步骤

from flask import Flask, render_template,session
from flask import signals
from flask.signals import _signals
app = Flask(__name__)

app.secret_key ='sadasd2q1'

# 自定义信号
# 1.定义信号
session_set = _signals.signal('session_set')  # session_set 信号名
# 2.写一个函数
def test(*args, **kwargs):
    print(args, kwargs)
    print('我执行了')

# 3.信号绑定
session_set.connect(test)  
# 4 自己触发信号

@app.route('/')
def hello_word():
    session['lxj'] = 18
    session_set.send()  # 信号名.set 触发信号执行
    return 'hello world'

@app.route('/index')
def index():
    return render_template('user.html')


if __name__ == '__main__':
    app.run()

django中使用信号

Model signals  # 模型层
    pre_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 signals   # 迁移命令
    pre_migrate                 # 执行migrate命令前,自动触发
    post_migrate                # 执行migrate命令后,自动触发
Request/response signals  # 请求
    request_started             # 请求到来前,自动触发
    request_finished            # 请求结束后,自动触发
    got_request_exception       # 请求异常后,自动触发
Database Wrappers   # 数据库
    connection_created          # 创建数据库连接时,自动触发
    
    
    
# django中使用内置信号
 1.写一个函数
    def callBack(*args, **kwargs):
        print(args)
        print(kwargs)
 2.绑定信号
    # 方式一
	post_save.connect(callBack)
    # 方式二
    formfrom django.db.models.signals import pre_save
	from django.dispatch import receiver
    @receiver(pre_save)
    def my_callback(sender, **kwargs):
        print("对象创建成功")
        print(sender)
        print(kwargs)
 3.等待触发

django信号使用详细文档

https://www.cnblogs.com/liuqingzheng/articles/9803403.html

标签:__,触发,flask,django,signals,信号
From: https://www.cnblogs.com/LiaJi/p/17302418.html

相关文章

  • flask----day05( )
    ......昨日回顾#1导出项目依赖pipreqs#2函数和方法的区别#3local对象 -并发编程中的一个对象,它可以保证多线程并发访问数据安全-本质原理是:不同的线程,操作的是自己的数据-不支持协程#4自己定义local,支持线程和协程 #注意点一:try:......
  • flask之信号,flask-script,sqlalchemy介绍和快速使用,创建操作数据表
    目录flask之信号,flask-script,sqlalchemy介绍和快速使用,创建操作数据表昨日回顾今日内容详细1信号1.2django信号2flask-script3sqlalchemy快速使用4使用sqlalchemy创建操作数据库补充flask之信号,flask-script,sqlalchemy介绍和快速使用,创建操作数据表昨日回顾#1local对象......
  • Flask 与 HTML5 简单功能实现
    Flask与HTML5简单功能实现目录Flask与HTML5简单功能实现1实现注册与登陆1.1前端配置1.2后端配置2flask与html5+1.1前端配置1.1.1index.html配置1.1.2main.html配置1.1.3register.html配置1.1.4login.html配置1.1.5user_info.html配置1.1.6audio.html2.1后端配......
  • Flask 学习
    Flask目录Flask1flask简介2Flask2.1Flaskresponse2.2FlaskRequest2.3Flask中的Session2.4Flask模板语言2.4.1Jinja22.5Flask路由2.6Flask初始化实例化参数2.7Flasksetting2.8FlaskBluePrint2.8.1使用Flask模拟Django2.9.2Flask-session模块使用2.9Flask......
  • flask---day04()
    上节回顾#1蓝图 -第一步:导入-第二步:实例化得到对象,可以指定static和templates-第三步:app中注册蓝图,注册蓝图时,可以指定前缀-第四步:使用蓝图,注册路由,注册请求扩展#2g对象 -当次请求的全局对象,在当次请求中可以放值和取值-跟session的区......
  • 信号,flask-script,sqlalchemy 快速使用
    信号,flask-script,sqlalchemy快速使用信号#Flask框架中的信号基于blinker(安装这个模块),其主要就是让开发者可是在flask请求过程中定制一些用户行为flask和django都有#观察者模式,又叫发布-订阅(Publish/Subscribe)23种设计模式之一pip3.8installblinker#信号:signi......
  • Flask框架
    Flask1.flask和pythonweb框架介绍pythonweb框架介绍本质一样,只要是web框架都会有请求对象和响应对象(会有路由、视图函数等东西)django:大而全,有很多内置和第三方的app让我们使用【主流】flask:小而精,没有那么多内置组件,只完成基本的web框架功能(接收请求返回视图函数执行)。只......
  • Flask框架 之Flask-session
    flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方一、filesystemfromflaskimportFlask,sessionfromflask_sessionimportSessionapp=Flask(__name__)app.secret_key="Yang"app.config[......
  • 基于matlab模拟雷达信号检测中的恒虚警处理方法(慢门限和快门限)
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 《Flask Web 开发指南 pt.2》
    哈喽大家好,我是咸鱼 在《FlaskWeb开发指南pt.1》中,咸鱼跟大家介绍了Flask的由来——诞生于一个愚人节玩笑,简单介绍了一些关于Flask的概念,并且编写了一个简单的Flask程序 在编写Flask程序的时候,你需要注意你的程序文件不要命名为flask.py,建议命名为app.py或者......