Flask信号

信号

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

1. 定义信号:定义信号需要使用到blinker这个包的Namespace类来创建一个命名空间。比如定义一个在访问了某个视图函数的时候的信号。

    # Namespace的作用:为了防止多人开发的时候,信号名字冲突的问题
    from blinker import Namespace

    mysignal = Namespace()
    visit_signal = mysignal.signal('visit-signal')

2. 监听信号:监听信号使用singal对象的connect方法,在这个方法中需要传递一个函数,用来接收以后监听到这个信号该做的事情。

    def visit_func(sender,username):
        print(sender)
        print(username)
    mysignal.connect(visit_func) #connect监听信号

3. 发送信号:发送信号使用singal对象的send方法,这个方法可以传递一些其他参数过去。

  mysignal.send(username='tian')

自定义信号实现登录日志的记录

from blinker import Namespace
from datetime import datetime
from flask import request, g

namespace = Namespace()

login_signal = namespace.signal('login') #定义信号

#执行的函数
def login_log(sender):
    # 记录用户名,登录的时间,ip地址
    now = datetime.now()
    ip = request.remote_addr
    log_line = "{username}*{now}*{ip}".format(username=g.username, now=now, ip=ip)
    with open('login_log.txt', 'a') as fp:
        fp.write(log_line + "\n")


login_signal.connect(login_log) #监听信号
@app.route('/login/')
def login():
    username = request.args.get('username')
    if username:
        g.username = username
        login_signal.send()           # 发送信号
        return '登录成功!'
    else:
        return '请输入用户名!'

内置信号

1. template_rendered:模版渲染完成后的信号。

2. before_render_template:模版渲染之前的信号。

3. request_started:模版开始渲染。

4. request_finished:模版渲染完成。

5. request_tearing_down:request对象被销毁的信号。

6. got_request_exception:视图函数发生异常的信号。一般可以监听这个信号,来记录网站异常信息。

7. appcontext_tearing_down:app上下文被销毁的信号。

8. appcontext_pushed:app上下文被推入到栈上的信号。

9. appcontext_popped:app上下文被推出栈中的信号

10. message_flashed:调用了Flask的`flashed`方法的信号。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值