麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

Python Web框架Flask信號機制(signals)介紹

2020-02-23 06:16:58
字體:
來源:轉載
供稿:網友

信號(signals)

Flask信號(signals, or event hooking)允許特定的發送端通知訂閱者發生了什么(既然知道發生了什么,那我們可以知道接下來該做什么了)。

Flask提供了一些信號(核心信號)且其它的擴展提供更多的信號。信號是用于通知訂閱者,而不應該鼓勵訂閱者修改數據。相關信號請查閱文檔。

信號依賴于Blinker庫。

鉤子(hooks)

Flask鉤子(通常出現在藍圖或應用程序現存的方法中,比如一些內置裝飾器,例如before_request)不需要Blinker庫并且允許你改變請求對象(request)或者響應對象(response)。這些改變了應用程序(或者藍圖)的行為。比如before_request()裝飾器。

信號看起來和鉤子做同樣的事情。然而在工作方式上它們存在不同。譬如核心的before_request()處理程序以特定的順序執行,并且可以在返回響應之前放棄請求。相比之下,所有的信號處理器是無序執行的,并且不修改任何數據。

一般來說,鉤子用于改變行為(比如,身份驗證或錯誤處理),而信號用于記錄事件(比如記錄日志)。

創建信號

因為信號依賴于Blinker庫,請確保已經安裝。

如果你要在自己的應用中使用信號,你可以直接使用Blinker庫。最常見的使用情況是命名一個自定義的Namespace的信號。這也是大多數時候推薦的做法:


代碼如下:
from blinker import Namespace
my_signals = Namespace()


現在你可以像這樣創建新的信號:


代碼如下:
model_saved = my_signals.signal('model-saved')


這里使用唯一的信號名并且簡化調試??梢杂胣ame屬性來訪問信號名。

對擴展開發者:

如果你正在編寫一個Flask擴展,你想優雅地減少缺少Blinker安裝的影響,你可以這樣做使用flask.signals.Namespace類。

訂閱信號

你可以使用信號的connect()方法來訂閱信號。第一個參數是信號發出時要調用的函數,第二個參數是可選的,用于確定信號的發送者。一個信號可以擁有多個訂閱者。你可以用disconnect()方法來退訂信號。

對于所有的核心Flask信號,發送者都是發出信號的應用。當你訂閱一個信號,請確保也提供一個發送者,除非你確實想監聽全部應用的信號。這在你開發一個擴展的時候尤其正確。

比如這里有一個用于在單元測試中找出哪個模板被渲染和傳入模板的變量的助手上下文管理器:


代碼如下:
from flask import template_rendered
from contextlib import contextmanager

@contextmanager
def captured_templates(app):
    recorded = []
    def record(sender, template, context, **extra):

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 一级一片免费看 | 一级在线视频 | 国产高潮好爽好大受不了了 | 国产精品免费久久久久久 | 久久亚洲春色中文字幕久久 | 羞羞视频免费网站男男 | 一区二区精品视频在线观看 | aa国产视频一区二区 | 看片一区二区三区 | 国产精品久久久久久久久久大牛 | 欧美一区二区三区中文字幕 | 依人在线视频 | 国产精品久久久久久久久久 | 港台三级在线观看 | 日韩蜜桃视频 | 国产成人精品视频在线 | 羞羞的视频免费在线观看 | mmmwww| www.99热精品| 免费中文视频 | 国产成人高清在线观看 | 国产一级毛片av | 色域tv| 91成人午夜性a一级毛片 | 国产精品刺激对白麻豆99 | 在线播放av片 | 九色中文字幕 | 91色一区二区三区 | 国产999视频在线观看 | 久久久中精品2020中文 | 午夜精品成人一区二区 | 国产精品视频海角社区88 | 欧美大片一级毛片 | 男男啪羞羞视频网站 | 99精品视频在线免费观看 | 中文字幕一二三区芒果 | 日本不卡中文字幕 | 337p粉嫩大胆噜噜噜亚瑟影院 | 成人福利视频导航 | 亚洲精品aaaaa | 欧美大电影免费观看 |