from blinker import Namespace from datetime import datetime from flask import request namespace = Namespace() login_signals = namespace.signal(‘login‘) def login_log(sender,username): #一般实际开发中,要记录用户名,登录时间,用户ip login_time = datetime.now() user_ip = request.remote_addr #获取远程用户的ip地址 log_line = ‘{username}*{user_ip}*{login_time}‘.format(username=username,user_ip=user_ip,login_time=login_time) with open(‘login.txt‘,‘a‘) as fp: fp.write(log_line+‘ ‘) login_signals.connect(login_log)#监听这个函数
from flask import Flask,request from signals import login_signals from blinker import Namespace #信号 # namespace = Namespace()#实例化一个对象 # fire_signal = namespace.signal(‘fire‘) #定义一个信号 # # # #监听信号 # def fire_bullet(sender): # print(sender) # print(‘start fire bullet‘) # # fire_signal.connect(fire_bullet)#监听这个信号,有信号就执行这个函数 # # # #发送一个信号 # fire_signal.send() #实际情况使用场景:定义一个登录的信号,以后用户登录进来以后 #就发送一个登录信号,然后能够监听这个信号 #在监听到这个信号以后,就记录当前这个用户登录的信息 #用信号的方式,记录用户的登录信息 app = Flask(__name__) @app.route(‘/‘) def hello_world(): return ‘hello_world‘ @app.route(‘/login/‘) def login(): #同过查询字符串的方式来传递username这个参数 username = request.args.get(‘username‘) if username: login_signals.send(username=username)#发送信号,可以携带参数 return ‘登录成功‘ else: return ‘请输入用户名‘ if __name__ == ‘__main__‘: app.run()