執行依賴乙個基於python的訊號庫blinker:
pip install blinker
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'
)# 請求執行完畢後自動執行(無論成功與否)
)# 應用上下文執行完畢後自動執行(無論成功與否) )
# 應用上下文push時執行
)# 應用上下文pop時執行
message_flashed = _signals.signal(
'message-flashed'
)# 呼叫flask在其中新增資料時,自動觸發
讓開發者可以在請求過程中定製一些使用者行為:
- 記錄日誌(某個表新增了資料,記錄日誌,某個表刪除了資料。。。)
- 更新快取(假設給article表資料加了快取,一旦該錶插入資料,一旦觸發article表新增資料的訊號,刪除快取,重新生成快取(同步的話速度稍微慢一些,結合celery,非同步生成快取))
# 第一步:定義要給函式
# 第二步:跟訊號繫結
訊號.connect(函式記憶體位址)
# 第三步:觸發訊號(內建訊號自動觸發)
示例:
from flask import flask, signals, render_template
# 定義乙個函式
defbefore_request_signal
(*args,
**kwargs)
:print
(args)
print
(kwargs)
print
('模板渲染了,觸發了這個訊號'
)# 跟訊號繫結
signals.request_started.connect(before_request_signal)
# 第三步:觸發訊號(不需要手動觸發,請求走到這,就會觸發)
'/')
defhello()
:return render_template(
'index.html'
)if __name__ ==
'__main__'
:)
from flask import flask, signals, render_template
from flask.signals import _signals
# 第一步:定義訊號
cc = _signals.signal(
'cc'
)# 第二步:寫好函式
defbefore_request_signal
(*args,
**kwargs)
:print
(args)
print
(kwargs)
print
('觸發了自定義的cc訊號'
)# 第三步:跟自己寫的訊號繫結
cc.connect(before_request_signal)
# 第四步:觸發訊號(自定義訊號,要自己手動觸發)
'/')
defhello_world()
: res = render_template(
'index.html'
)# 在模板渲染之後,手動觸發自定義的cc訊號
cc.send(
'sss'
, name=
'cc'
)return res
if __name__ ==
'__main__'
:)
# 版本依賴: werkzeug: 0.16.1及之前的版本才支援
from werkzeug.wsgi import dispatchermiddleware
from werkzeug.serving import run_******
'/index1'
)def
index1()
:return
'/index2'
)def
index2()
:return
{'/pro'
)if __name__ ==
'__main__'
: run_******(
'localhost'
,5000
, dm)
# 當請求來了:dm()-->dispatchermiddleware的__call__
Flask 如何配置多環境
乙個完整的web專案都需要配置資料庫連線和開發環境 生產環境靈活切換,今天來在 各個環境中切換資料庫連線 在專案根目錄下建立環境指令碼touch env.sh並編輯 123 4567 891011 usr bin env bash env 1 if then env local fiexport p...
Flask 多對多關係
1.專案結構 對錶的基本操作可見鏈結 3.多對多關係 以下通過文章,作者,文章 標記 三個表示例操作 from flask import flask from flask sqlalchemy import sqlalchemy import config create table article ...
Flask框架之內置訊號
內建訊號,已將將建立訊號與傳送訊號功能完成,只需要了解其功能,做出相應的監聽使用就可以了。template rendered 模版渲染完成後的訊號。from flask import flask,request,g,template rendered,got request exception,re...