08 flask訊號 多app應用

2021-10-20 03:03:30 字數 2776 閱讀 6594

執行依賴乙個基於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...