Flask 核心信號(hào)

2021-08-10 17:54 更新

下列是 Flask 中存在的信號(hào):

flask.template_rendered

當(dāng)模板成功渲染的時(shí)候,這個(gè)信號(hào)會(huì)發(fā)出。這個(gè)信號(hào)與模板實(shí)例 template 和上下文的字典(名為 context )一起調(diào)用。

訂閱示例:

def log_template_renders(sender, template, context, **extra):
    sender.logger.debug('Rendering template "%s" with context %s',
                        template.name or 'string template',
                        context)

from flask import template_rendered
template_rendered.connect(log_template_renders, app)
flask.request_started

這個(gè)信號(hào)在處建立請(qǐng)求上下文之外的任何請(qǐng)求處理開始前發(fā)送。因?yàn)檎?qǐng)求上下文 已經(jīng)被約束,訂閱者可以用 request 之類的標(biāo)準(zhǔn)全局代理訪問 請(qǐng)求。

訂閱示例:

def log_request(sender, **extra):
    sender.logger.debug('Request context is set up')

from flask import request_started
request_started.connect(log_request, app)
flask.request_finished

這個(gè)信號(hào)恰好在請(qǐng)求發(fā)送給客戶端之前發(fā)送。它傳遞名為 response 的響應(yīng)。

訂閱示例:

def log_response(sender, response, **extra):
    sender.logger.debug('Request context is about to close down.  '
                        'Response: %s', response)

from flask import request_finished
request_finished.connect(log_response, app)
flask.got_request_exception

這個(gè)信號(hào)在請(qǐng)求處理中拋出異常時(shí)發(fā)送。它在標(biāo)準(zhǔn)異常處理生效 之前 ,甚至是 在沒有異常處理的情況下發(fā)送。異常本身會(huì)通過 exception 傳遞到訂閱函數(shù)。

訂閱示例:

def log_exception(sender, exception, **extra):
    sender.logger.debug('Got exception during processing: %s', exception)

from flask import got_request_exception
got_request_exception.connect(log_exception, app)
flask.request_tearing_down

這個(gè)信號(hào)在請(qǐng)求銷毀時(shí)發(fā)送。它總是被調(diào)用,即使發(fā)生異常。當(dāng)前監(jiān)聽這個(gè)信號(hào) 的函數(shù)會(huì)在常規(guī)銷毀處理后被調(diào)用,但這不是你可以信賴的。

訂閱示例:

def close_db_connection(sender, **extra):
    session.close()

from flask import request_tearing_down
request_tearing_down.connect(close_db_connection, app)

從 Flask 0.9 ,如果有異常的話它會(huì)被傳遞一個(gè) exc 關(guān)鍵字參數(shù)引用導(dǎo)致銷 毀的異常。

flask.appcontext_tearing_down

這個(gè)信號(hào)在應(yīng)用上下文銷毀時(shí)發(fā)送。它總是被調(diào)用,即使發(fā)生異常。當(dāng)前監(jiān)聽這個(gè)信號(hào) 的函數(shù)會(huì)在常規(guī)銷毀處理后被調(diào)用,但這不是你可以信賴的。

訂閱示例:

def close_db_connection(sender, **extra):
    session.close()

from flask import request_tearing_down
appcontext_tearing_down.connect(close_db_connection, app)

如果有異常它會(huì)被傳遞一個(gè) exc 關(guān)鍵字參數(shù)引用導(dǎo)致銷毀的異常。

flask.appcontext_pushed

這個(gè)信號(hào)在應(yīng)用上下文壓入棧時(shí)發(fā)送。發(fā)送者是應(yīng)用對(duì)象。這通常在單元測(cè)試中 為了暫時(shí)地鉤住信息比較有用。例如這可以用來提前在 g 對(duì)象上設(shè)置一些資源。

用法示例:

from contextlib import contextmanager
from flask import appcontext_pushed

@contextmanager
def user_set(app, user):
    def handler(sender, **kwargs):
        g.user = user
    with appcontext_pushed.connected_to(handler, app):
        yield

測(cè)試代碼:

def test_user_me(self):
    with user_set(app, 'john'):
        c = app.test_client()
        resp = c.get('/users/me')
        assert resp.data == 'username=john'

0.10 新版功能.

flask.appcontext_popped

這個(gè)信號(hào)在應(yīng)用上下文彈出棧時(shí)發(fā)送。發(fā)送者是應(yīng)用對(duì)象。這通常在 appcontext_tearing_down 信號(hào)發(fā)送后發(fā)送。

0.10 新版功能.

flask.message_flashed

這個(gè)信號(hào)在應(yīng)用對(duì)象閃現(xiàn)一個(gè)消息時(shí)發(fā)送。消息作為 message 命名參數(shù)發(fā)送, 分類則是 category 參數(shù)。

訂閱示例:

recorded = []
def record(sender, message, category, **extra):
    recorded.append((message, category))

from flask import message_flashed
message_flashed.connect(record, app)

0.10 新版功能.


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)