zoukankan      html  css  js  c++  java
  • flask信号

    flask-信号

     

    Flask框架中的信号基于blinker,其主要就是让开发者可是在flask请求过程中定制一些用户行为。

    1
    pip3 install blinker

    1. 内置信号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    request_started= _signals.signal('request-started')               # 请求到来前执行
    request_finished= _signals.signal('request-finished')             # 请求结束后执行
     
    before_render_template= _signals.signal('before-render-template'# 模板渲染前执行
    template_rendered= _signals.signal('template-rendered')           # 模板渲染后执行
     
    got_request_exception= _signals.signal('got-request-exception')   # 请求执行出现异常时执行
     
    request_tearing_down= _signals.signal('request-tearing-down')     # 请求执行完毕后自动执行(无论成功与否)
    appcontext_tearing_down= _signals.signal('appcontext-tearing-down')# 应用上下文执行完毕后自动执行(无论成功与否)
     
    appcontext_pushed= _signals.signal('appcontext-pushed')           # 应用上下文push时执行
    appcontext_popped= _signals.signal('appcontext-popped')           # 应用上下文pop时执行
    message_flashed= _signals.signal('message-flashed')               # 调用flask在其中添加数据时,自动触发

    源码示例

     request_started
     request_finished
     before_render_template
     template_rendered
     got_request_exception
     request_tearing_down
     appcontext_tearing_down
     appcontext_tearing_down
     appcontext_pushed
     appcontext_popped
     message_flashed

    2. 自定义信号

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    from flaskimport Flask, current_app, flash, render_template
    from flask.signalsimport _signals
     
    app= Flask(import_name=__name__)
     
     
    # 自定义信号
    xxxxx= _signals.signal('xxxxx')
     
     
    def func(sender,*args,**kwargs):
        print(sender)
     
    # 自定义信号中注册函数
    xxxxx.connect(func)
     
     
    @app.route("/x")
    def index():
        # 触发信号
        xxxxx.send('123123', k1='v1')
        return 'Index'
     
     
    if __name__== '__main__':
        app.run()
  • 相关阅读:
    zabbix系列 ~ mongo监控相关
    zabbix系列 ~ 自动监控多实例功能
    mysql 查询优化 ~ 多表查询改写思路
    MGR架构~高可用架构细节的梳理
    mysql 半同步复制~ 整体概述与改进
    android 单独编译某个模块
    Nginx使用
    21天学通C++学习笔记(九):类和对象
    1. 个人经验总结
    C++视频教程学习笔记
  • 原文地址:https://www.cnblogs.com/xiangwang1/p/15071617.html
Copyright © 2011-2022 走看看