七十三:flask信号之信号机制和使用场景
2024-09-05 11:28:31
若安装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)
最新文章
- monkeyrunner之控件ID不存在或重复
- JS实战 ·  收缩菜单表单布局
- Redis的安装和使用
- Eclipse linux tools 插件
- HTML5 aria- and role
- Android刷新Dialog
- android 学习(1)
- 二叉平衡查找树AvlTree(C实现)
- LINQ及EntityFramework何时从数据库返回数据,备忘
- linux 配置免密码登录
- sublime text高亮less
- java 工厂的变形模拟的各种应用
- css实现移动端水平滚动导航
- android 制作9.png图
- poj 3321 单点更新 区间求和
- [转载]敏感词过滤,PHP实现的Trie树
- C#socket编程序(二)
- IOS Xib使用——为控制器添加Xib文件
- docker 数据卷 ---- 基础篇
- APUE学习笔记——10.11~10.13 信号集、信号屏蔽字、未决信号
热门文章
- PhotoShop更改图片背景色
- /build-impl.xml:1030: The module has not been deployed.(netbean javaweb)
- Sass的混合-@mixin,@include
- OJ问题集合
- Android异常与性能优化相关面试问题-ANR异常面试问题详解
- socket 测试工具java
- 10分钟搭建Kubernetes容器集群平台(kubeadm)
- C# 数组转字符串显示
- Linux系统挂载存储只读改成读写
- jenkins发送jemter邮件附件格式配置