Flask 核心信號

2021-08-10 17:54 更新

下列是 Flask 中存在的信號:

flask.template_rendered

當模板成功渲染的時候,這個信號會發(fā)出。這個信號與模板實例 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

這個信號在處建立請求上下文之外的任何請求處理開始前發(fā)送。因為請求上下文 已經(jīng)被約束,訂閱者可以用 request 之類的標準全局代理訪問 請求。

訂閱示例:

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

這個信號恰好在請求發(fā)送給客戶端之前發(fā)送。它傳遞名為 response 的響應。

訂閱示例:

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

這個信號在請求處理中拋出異常時發(fā)送。它在標準異常處理生效 之前 ,甚至是 在沒有異常處理的情況下發(fā)送。異常本身會通過 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

這個信號在請求銷毀時發(fā)送。它總是被調(diào)用,即使發(fā)生異常。當前監(jiān)聽這個信號 的函數(shù)會在常規(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 ,如果有異常的話它會被傳遞一個 exc 關鍵字參數(shù)引用導致銷 毀的異常。

flask.appcontext_tearing_down

這個信號在應用上下文銷毀時發(fā)送。它總是被調(diào)用,即使發(fā)生異常。當前監(jiān)聽這個信號 的函數(shù)會在常規(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)

如果有異常它會被傳遞一個 exc 關鍵字參數(shù)引用導致銷毀的異常。

flask.appcontext_pushed

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

用法示例:

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

測試代碼:

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

這個信號在應用上下文彈出棧時發(fā)送。發(fā)送者是應用對象。這通常在 appcontext_tearing_down 信號發(fā)送后發(fā)送。

0.10 新版功能.

flask.message_flashed

這個信號在應用對象閃現(xiàn)一個消息時發(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)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號