若安装flask是未默认安装blinker,则pip install blinker

使用信号分为3步,第一是定义一个信号,第二是监听一个信号,第三是发送一个信号

1.定义信号:定义信号需要使用到blinker.Namespace来创建一个命名空间
  from blinker import Namespace
  name_space = Namespace()
  login_signal = name_space.signal('login') # 为了解决防止多人开发的时候,信号名字冲突的问题

2.监听信号:监听信号使用singal对象的connect方法,在这个方法中需要传递一个函数,用来处理接收到信号后该做的事情
  def login_log(sender):
  """ 用户名、登录时间、ip地址 """
  log_line = f'{g.username}--{datetime.now()}--{request.remote_addr}'
  with open('login_log.txt', 'a') as fp:
  fp.write(log_line + '\n')

3.发送信号:发送信号使用singal对象的send方法,这个方法可以携带参数
  login_signal.send()

使用方法示例

# 1.定义信号
name_space = Namespace()
fire_signal = name_space.signal('fire') # 2.监听信号
def fire_bullet(sender):
print(sender)
print('start fire bullet') fire_signal.connect(fire_bullet) # 3.发送信号
fire_signal.send()

使用场景

用信号的方式,记录用户的登录信息
1.定义一个登录的信号,以后用户登录进来以后,就发送一个登录信号,然后就能监听这个信号
2.监听到信号后,就可以记录当前这个用户登录的信息

# 用信号的方式,记录用户的登录信息
# 1.定义一个登录的信号,以后用户登录进来以后,就发送一个登录信号,然后就能监听这个信号
# 2.监听到信号后,就可以记录当前这个用户登录的信息
from datetime import datetime
from blinker import Namespace
from flask import request, g # 创建信号
name_space = Namespace()
login_signal = name_space.signal('login') def login_log(sender):
""" 用户名、登录时间、ip地址 """
log_line = f'{g.username}--{datetime.now()}--{request.remote_addr}'
with open('login_log.txt', 'a') as fp:
fp.write(log_line + '\n') # 监听信号
login_signal.connect(login_log)

from flask import Flask, request, g
from signals import login_signal app = Flask(__name__) @app.route('/')
def index():
return 'hello word' @app.route('/login/')
def login():
username = request.args.get('username')
if username:
g.username = username
login_signal.send() # 发送信号
return '登录成功'
else:
return '请输入用户名' if __name__ == '__main__':
app.run(debug=True)

七十三:flask信号之信号机制和使用场景的更多相关文章

  1. 第七章 探秘Qt的核心机制-信号与槽

    第七章 探秘Qt的核心机制-信号与槽 注:要想使用Qt的核心机制信号与槽,就必须在类的私有数据区声明Q_OBJECT宏,然后会有moc编译器负责读取这个宏进行代码转化,从而使Qt这个特有的机制得到使用 ...

  2. QT的信号与槽机制介绍

      信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗 ...

  3. QT的信号和槽机制简介

    信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗口部 ...

  4. flask,scrapy,django信号

    简介 Django.Flask.scrapy都包含了一个“信号分配器”,使得当一些动作在框架的其他地方发生的时候,解耦的应用可以得到提醒. 通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒 ...

  5. qt中信号与槽机制

    一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不 ...

  6. Linux信号(signal) 机制分析

    Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...

  7. Qt入门之信号与槽机制

    一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不 ...

  8. Linux 信号signal处理机制

    信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念.Linux对信号机制的大致实现方法.如何使用信号,以及有关信号的几个系统调用. 信号机制是进程之间相互传递消息的一种方法,信号全 ...

  9. Qt源码分析之信号和槽机制

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  10. Qt 的信号与槽机制介绍(10个要注意的问题)

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

随机推荐

  1. storcli/percli的使用场景

    目录 storcli/percli常用场景 storcli/percli常用场景 查看帮助信息 storcli64 help 查看控制器数量 storcli64 show ctrlcount [roo ...

  2. 7.Nginx_Keepalived高可用配置

    2. 利用keepalived实现高可靠配置(HA) 2.1. 高可靠概念 HA(High Available):高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节 ...

  3. uvalive 5905 Pool construction

    题目链接 题意: 有一个花园,有些地方是草地,有些地方是洞,现在要在这个花园中修建一个泳池,泳池全部由洞构成. 把洞变成草地需要花费一定的费用,把草地变成洞也需要花费一定的费用,并且泳池的边缘的草地上 ...

  4. java8学习之方法引用详解及默认方法分析

    方法引用: 之前花了很多时间对Lambda表达式进行了深入的学习,接下来开启新的主题---方法引用(Method References),其实在之前的学习中已经使用过了,如: 那方法引用跟Lambda ...

  5. python 示例代码5

    示例5:用户输入和格式化输出2(用户输入demo1)

  6. QT一个最简单的openGL例子

    创建一个基类为widget的工程 把文件夹glut64放到代码目录下,文件夹包含以下文件 freeglut.dll freeglut.lib glut.h freeglut.h freeglut_ex ...

  7. uboot驱动模型(DM)分析(二) (转)

    上篇分析了两个关键宏U_BOOT_DRIVER及U_BOOT_DEVICES的作用,有了上篇的基础,本文将分析: 1.上篇中的uboot_list段中的信息如何被用起来? 2.uclass,uclas ...

  8. NoSQL数据库技术实战-第1章 NoSQL与大数据简介 NoSQL数据库的类型

    键值存储数据库临时性:如Memcached.临时性的键值数据库把数据存储在内存中,在两种情况下会造成上数据的丢失,一是断电,而是数据内容超出内存大小.这种处理的好处是非常快.永久型:如Tokyo Ty ...

  9. ogg中断处理

    ogg因为网络问题导致中断无法启动,需要重新抽取数据: --前滚抽取进程生成新的trail文件 alter extract ext147 etrollover alter ext147 extseqn ...

  10. 3 监控项、触发器、web监控、nginx监控

    1.自定义监控项 Item 参数文档 https://www.zabbix.com/documentation/3.0/manual/config/items/itemtypes/zabbix_age ...