若安装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)

最新文章

  1. monkeyrunner之控件ID不存在或重复
  2. JS实战 ·  收缩菜单表单布局
  3. Redis的安装和使用
  4. Eclipse linux tools 插件
  5. HTML5 aria- and role
  6. Android刷新Dialog
  7. android 学习(1)
  8. 二叉平衡查找树AvlTree(C实现)
  9. LINQ及EntityFramework何时从数据库返回数据,备忘
  10. linux 配置免密码登录
  11. sublime text高亮less
  12. java 工厂的变形模拟的各种应用
  13. css实现移动端水平滚动导航
  14. android 制作9.png图
  15. poj 3321 单点更新 区间求和
  16. [转载]敏感词过滤,PHP实现的Trie树
  17. C#socket编程序(二)
  18. IOS Xib使用——为控制器添加Xib文件
  19. docker 数据卷 ---- 基础篇
  20. APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号

热门文章

  1. PhotoShop更改图片背景色
  2. /build-impl.xml:1030: The module has not been deployed.(netbean javaweb)
  3. Sass的混合-@mixin,@include
  4. OJ问题集合
  5. Android异常与性能优化相关面试问题-ANR异常面试问题详解
  6. socket 测试工具java
  7. 10分钟搭建Kubernetes容器集群平台(kubeadm)
  8. C# 数组转字符串显示
  9. Linux系统挂载存储只读改成读写
  10. jenkins发送jemter邮件附件格式配置