Flask拓展(一)-- 信号

Flask框架中的信号基于blinker,安装包

pip3 install blinker

  一、内置信号  

from flask import signals   # 内置信号

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在其中添加数据时,自动触发

信号执行顺序

    # 第一步
    app.__call__
    # 第二步
    app.wsgi_app
    # 第三步
        app.before_first_request
        # 触发请求开始信号
        signals.request_started
        app.before_request
        模板渲染
            # 渲染前信号
            before_render_template.send(app,template=template,context=context)
            # 渲染模板
            rv = template_render(context)
            # 渲染后信号
            template_rendered.send(app,template=template,context=context)
        app.after_request
        session.save_session()
        # 触发信号
        signals.request_finished

        如果上述出现错误
        # 触发错误处理信号
        got_request_exception.send(self,exception=e)
    # 返回信息
    response
    # 触发信号
    signals.request_tearing_down
    app.teardown_request
from flask import Flask,signals,template_rendered,session
app = Flask(__name__)


def func(*args,**kwargs):
    print("触发信号",args,kwargs)

# 往信号中注册信号函数
signals.request_started.connect(func)
# 触发信号
signals.request_started.send()


@app.before_request
def berfore(*args,**kwargs):
    print("...")


@app.route('/')
def index():
    print("index函数")
    return 'index'


if __name__ == '__main__':

    app.run()
简单用法
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask, current_app, flash, render_template
from flask.signals import _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()
自定义信号
posted @ 2019-01-30 13:19  我在地球凑人数的日子  阅读(111)  评论(0)    收藏  举报