七十三:flask信号之信号机制和使用场景

Posted zhongyehai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了七十三:flask信号之信号机制和使用场景相关的知识,希望对你有一定的参考价值。

 

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

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 + ‘ ‘)


# 监听信号
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信号之信号机制和使用场景的主要内容,如果未能解决你的问题,请参考以下文章

Qt系列文章之三十三 (基于QThread的信号量的线程同步)

Qt系列文章之三十三 (基于QThread的信号量的线程同步)

通信算法之七十五:无人机通信-接收信号解析破解

通信算法之七十五:无人机通信-接收信号解析破解

Flask 信号机制 (signals)

第二十三篇:信号机制的两个思考