Flask系列教程(32)——Flask訊號
阿新 • • 發佈:2018-10-31
Flask訊號:
如果想深入學習Flask,可以觀看這套免費Flask教學視訊:零基礎:Flask入門到專案實戰
安裝:
flask
中的訊號使用的是一個第三方外掛,叫做blinker
。通過pip list
看一下,如果沒有安裝,通過以下命令即可安裝blinker
:
pip install blinker
內建訊號:
flask
內建集中常用的訊號:
flask.template_rendered
:模版渲染完畢後傳送,示例如下:
from flask import template_rendered
def log_template_renders (sender,template,context,*args):
print 'sender:',sender
print 'template:',template
print 'context:',context
template_rendered.connect(log_template_renders,app)
flask.request_started
:請求開始之前,在到達檢視函式之前傳送,訂閱者可以呼叫request
之類的標準全域性代理訪問請求。示例如下:
def log_request_started(sender,**extra):
print 'sender:',sender
print 'extra:',extra
request_started.connect(log_request_started,app)
flask.request_finished
:請求結束時,在響應傳送給客戶端之前傳送,可以傳遞response
,示例程式碼如下:
def log_request_finished(sender,response,*args):
print 'response:',response
request_finished.connect(log_request_finished,app)
flask.got_request_exception
:在請求過程中丟擲異常時傳送,異常本身會通過exception
傳遞到訂閱的函式。示例程式碼如下:
def log_exception_finished(sender,exception,*args):
print 'sender:',sender
print type(exception)
got_request_exception.connect(log_exception_finished,app)
flask.request_tearing_down
:請求被銷燬的時候傳送,即使在請求過程中發生異常,也會發送,示例程式碼如下:
def log_request_tearing_down(sender,**kwargs):
print 'coming...'
request_tearing_down.connect(log_request_tearing_down,app)
flask.appcontext_tearing_down
:在應用上下文銷燬的時候傳送,它總是會被呼叫,即使發生異常。示例程式碼如下:
def log_appcontext_tearing_down(sender,**kwargs):
print 'coming...'
appcontext_tearing_down.connect(log_appcontext_tearing_down,app)
自定義訊號:
自定義訊號分為3步,第一是定義一個訊號,第二是監聽一個訊號,第三是傳送一個訊號。以下將對這三步進行講解:
- 定義訊號:定義訊號需要使用到
blinker
這個包的Namespace
類來建立一個名稱空間。比如定義一個在訪問了某個檢視函式的時候的訊號。示例程式碼如下:
from blinker import Namespace
mysignal = Namespace()
visit_signal = mysignal.signal('visit-signal')
- 監聽訊號:監聽訊號使用
singal
物件的connect
方法,在這個方法中需要傳遞一個函式,用來接收以後監聽到這個訊號該做的事情。示例程式碼如下:
def visit_func(sender,username):
print(sender)
print(username)
mysignal.connect(visit_func)
- 傳送訊號:傳送訊號使用
singal
物件的send
方法,這個方法可以傳遞一些其他引數過去。示例程式碼如下:
mysignal.send(username='zhiliao')
如果想深入學習Flask,可以觀看這套免費Flask教學視訊:零基礎:Flask入門到專案實戰