日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Python Flask上下文管理機制實例解析

瀏覽:48日期:2022-08-02 10:13:59

前言

上下文這個概念多見于文章中,是一句話中的語境,也就是語言環境。一句莫名其妙的話出現會讓人不理解什么意思,如果有語言環境的說明,則會更好,這就是語境對語意的影響。

上下文是一種屬性的有序序列,為駐留在環境內的對象定義環境。在對象的激活過程中創建上下文,對象被配置為要求某些自動服務,如同步、事務、實時激活、安全性等等。

如在計算機中,相對于進程而言,上下文就是進程執行時的環境。具體來說就是各個變量和數據,包括所有的寄存器變量、進程打開的文件、內存信息等。可以理解上下文是環境的一個快照,是一個用來保存狀態的對象。在程序中我們所寫的函數大都不是單獨完整的,在使用一個函數完成自身功能的時候,很可能需要同其他的部分進行交互,需要其他外部環境變量的支持,上下文就是給外部環境的變量賦值,使函數能正確運行。

請求上下文

關于WSGI

WSGI(全稱Web Server Gateway Interface),是為 Python 語言定義的Web服務器和Web應用程序之間的一種簡單而通用的接口,它封裝了接受HTTP請求、解析HTTP請求、發送HTTP,響應等等的這些底層的代碼和操作,使開發者可以高效的編寫Web應用。

Flask提供了兩種上下文,一種是應用上下文(Application Context),一種是請求上下文(Request Context)。

RequestContext 請求上下文 Request 請求的對象,封裝了Http請求(environ)的內容 Session 根據請求中的cookie,重新載入該訪問者相關的會話信息。 AppContext 程序上下文 g 處理請求時用作臨時存儲的對象。每次請求都會重設這個變量 current_app 當前激活程序的程序實例

參見Flask上下文官方文檔 請求上下文 和 應用上下文.

  1. application 指的就是當你調用app = Flask(__name__)創建的這個對象app;

2.request 指的是每次http請求發生時,WSGI server(比如gunicorn)調Flask.call()之后,在Flask對象內部創建的Request對象;

3.application 表示用于響應WSGI請求的應用本身,request 表示每次http請求;

4.application的生命周期大于request,一個application存活期間,可能發生多次http請求,所以,也就會有多個request

生命周期

current_app的生命周期最長,只要當前程序實例還在運行,都不會失效。 Request和g的生命周期為一次請求期間,當請求處理完成后,生命周期也就完結了 Session就是傳統意義上的session了。只要它還未失效(用戶未關閉瀏覽器、沒有超過設定的失效時間),那么不同的請求會共用同樣的session。

Flask處理流程

Python Flask上下文管理機制實例解析

local線程隔離對象

不用local對象的情況

from threading import Threadrequest = ’123’class MyThread(Thread): def run(self): global request request = ’abc’ print(’子線程’,request) #子線程 abcmythread = MyThread()mythread.start()mythread.join()print(’主線程’,request) #主線程 abc

如果用local對象,在每個線程中都是隔離的

from threading import Threadfrom werkzeug.local import Locallocals = Local()locals.request = ’123’class MyThread(Thread): def run(self): locals.request = ’abc’ print(’子線程’,locals.request) #子線程 abcmythread = MyThread()mythread.start()mythread.join()print(’主線程’,locals.request) #主線程 123

app上下文和request上下文

應用上下文和請求上下文都是存放在一個‘LocalStack’的棧中,和應用app相關的操作就必須要用到應用上下文,比如通過current_app獲取當前的這個app的名字。和請求相關的操作就必須用到請求上下文,比如使用url_for反轉視圖函數。

在視圖函數中,不用擔心上下文的問題,因為視圖函數要執行,name肯定是通過訪問url的方式執行的,name這種情況下,Flask底層就已經自動的幫我們把請求上年文和應用上下文都推入到了相應的棧中。如果想要在視圖函數外面執行相關的操作,name就必須要手動推入相關的上下文手動推入請求上下文:推入請求上下文到棧中,會首先判斷有沒有應用上下文,如果沒有那么就會先推入應用上下文到棧中,然后再推入請求上下文到棧中。

app上下文

from flask import Flask,current_appapp = Flask(__name__)#如果在視圖函數外部訪問,則必須手動推入一個app上下文到app上下文棧中#第一種方法# app_context = app.app_context()# app_context.push()# print(current_app.name)#第二種方法with app.app_context(): print(current_app.name) #context_demo@app.route(’/’)def index(): # 在視圖函數內部可以直接訪問current_app.name print(current_app.name) #context_demo return ’Hello World!’if __name__ == ’__main__’: app.run(debug=True)

request請求上下文

from flask import Flask,current_app,url_forapp = Flask(__name__)#應用上下文#如果在視圖函數外部訪問,則必須手動推入一個app上下文到app上下文棧中with app.app_context(): print(current_app.name) #context_demo@app.route(’/’)def index(): # 在視圖函數內部可以直接訪問current_app.name print(current_app.name) #context_demo return ’Hello World!’@app.route(’/list/’)def my_list(): return ’my_list’# 請求上下文with app.test_request_context(): # 手動推入一個請求上下文到請求上下文棧中 # 如果當前應用上下文棧中沒有應用上下文 # 那么會首先推入一個應用上下文到棧中 print(url_for(’my_list’))if __name__ == ’__main__’: app.run(debug=True)

為什么上下文需要放在棧中?

1.應用上下文:

Flask底層是基于werkzeug,werkzeug是可以包含多個app的,所以這時候用一個棧來保存,如果你在使用app1,那么app1應該是要在棧的頂部,如果用完了app1那么app應該從棧中刪除,方便其他代碼使用下面的app。

2.應用上下文:

如果在寫測試代碼,或者離線腳本的時候,我們有時候可能需要創建多個請求上下文,這時候就需要存放到一個棧中了。使用哪個請求上下文的時候,就把對應的請求上下文放到棧的頂部,用完了就要把這個請求上下文從棧中移除掉。

線程隔離的g對象

g對象是在整個Flask應用運行期間都是可以使用的,并且它也是跟request一樣是線程隔離的。這個對象是專門用來存儲開發者自定義的一些數據,方便在整個Flask程序中都可以使用。一般使用就是,將一些經常會用到的數據綁定到上面,以后就直接從g上面取就可以了,而不是通過傳參的形式,這樣更加方便。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩一区二区在线免费| 精品国产中文字幕第一页| 91精品福利| 免费精品一区| 精品国产美女a久久9999| 国产精品99久久久久久董美香| 97久久超碰| 亚洲视频二区| 亚洲乱亚洲高清| 日本久久一区| 国产日韩欧美在线播放不卡| 日韩精品第一| 国产精品资源| 久久影视一区| 欧美精品日日操| 伊人久久大香伊蕉在人线观看热v| 国产亚洲电影| 久久精品成人| 日韩av一区二区三区四区| 久久中文字幕一区二区| 伊人久久大香线蕉av不卡| 天堂精品久久久久| 成人精品国产亚洲| 爽好多水快深点欧美视频| 久久精品超碰| 久久久精品久久久久久96 | 激情婷婷综合| 欧美一区成人| 激情偷拍久久| 国产精品欧美在线观看| 久久一级电影| 国产欧美欧美| 91精品亚洲| 欧美私人啪啪vps| 蜜臀av免费一区二区三区| 欧美久久一区二区三区| 色婷婷久久久| 国产欧美成人| 亚洲欧美日韩国产一区| 老司机免费视频一区二区| 亚洲激精日韩激精欧美精品| 久久不见久久见中文字幕免费| 亚洲国产日韩欧美在线| 精品淫伦v久久水蜜桃| 久久亚洲二区| 欧美日韩在线观看首页| 日韩av不卡一区二区| 亚洲伦乱视频| 国产免费播放一区二区| 国产亚洲综合精品| www.51av欧美视频| 日韩高清在线不卡| 久久精品国产www456c0m| 精品三区视频| 水蜜桃久久夜色精品一区| 亚洲免费激情| 国产精品99精品一区二区三区∴| 日韩三区免费| av在线最新| 欧美综合精品| 视频一区视频二区在线观看| 国产日韩电影| 日韩一区二区三区精品视频第3页| 日本韩国欧美超级黄在线观看| 国产精品片aa在线观看| 蜜臀av一区二区三区| 久久国产电影| 91亚洲自偷观看高清| 国产麻豆精品久久| 亚洲精品婷婷| 亚洲激情中文| 日韩精品免费一区二区三区| 精品美女在线视频| 69堂免费精品视频在线播放| 蜜乳av另类精品一区二区| 亚洲一级少妇| 精品国产亚洲日本| 日本亚洲视频| 国产精品日韩| 在线国产一区二区| 欧美午夜精品一区二区三区电影| 国产日韩电影| 欧美亚洲日本精品| 日本午夜大片a在线观看| 精品久久福利| 精品一区二区三区视频在线播放| 国产精品色在线网站| 日本不卡一区二区三区| 免费视频最近日韩| 中文日韩欧美| 中文日韩在线| 一区在线观看| 激情自拍一区| 亚洲小说欧美另类婷婷| 天堂资源在线亚洲| 激情欧美日韩一区| 欧美日韩国产亚洲一区| 99视频精品全国免费| 91精品国产福利在线观看麻豆| 日韩中文首页| 久久久夜夜夜| 欧美日韩亚洲在线观看| 欧美亚洲国产一区| 欧美特黄a级高清免费大片a级| 亚洲精品91| 视频一区二区三区入口| 亚洲影视一区二区三区| 中文字幕亚洲精品乱码| 国产精品视区| 一级欧美视频| 青青草精品视频| 国产精品调教| 成人精品高清在线视频| 在线天堂中文资源最新版| 日韩欧美字幕| 欧美理论视频| 亚洲一二三区视频| 91伊人久久| 国产精品xvideos88| 精品视频网站| 婷婷综合六月| 亚洲综合国产| 日本午夜精品| 国产情侣久久| 日韩免费一区| 在线午夜精品| 欧美一区网站| 成人一区而且| 欧美综合另类| 中文无码久久精品| 国产欧美综合一区二区三区| 精品国产一区二区三区2021| 日韩欧美二区| 亚洲一区不卡| 国产图片一区| 国产白浆在线免费观看| 婷婷精品进入| 91精品视频一区二区| 国产乱码精品一区二区三区四区 | 美女网站一区| 深夜日韩欧美| 麻豆视频一区| 激情丁香综合| 欧美一区二区三区久久精品| 精品三级久久久| 九色精品91| 亚洲伊人影院| 国产一区不卡| 一区二区三区四区日韩| 久久久久久久欧美精品| 精品一区二区三区中文字幕 | 蜜桃传媒麻豆第一区在线观看| 国产午夜一区| 视频福利一区| 国产亚洲电影| 91精品二区| 久久精品国产久精国产爱| 99久久精品网| 久久xxxx| 国产免费成人| 综合亚洲色图| 国产精品视频一区二区三区四蜜臂 | 欧美黄色一区| 久久精品九色| 久久福利精品| 国产精品一区二区三区av | 国产成人调教视频在线观看| 欧美日韩在线二区| 久久精品99久久久| 日本久久成人网| 亚洲精品韩国| 97精品国产一区二区三区| 日本精品不卡| 久久激五月天综合精品| 亚洲精品在线影院| 日本一区二区中文字幕| 久久久久免费| 欧美日韩视频| 国产精品15p| japanese国产精品| 国产精品日韩精品中文字幕| 日韩av在线播放网址| 日本不卡中文字幕| 天堂中文av在线资源库| 午夜视频一区二区在线观看| 首页国产精品| 欧美欧美黄在线二区| av综合电影网站| 亚洲一区二区三区无吗| 精品美女视频 | 91久久国产| 成人在线黄色| 中文一区一区三区免费在线观 | 黑人精品一区| 国产日本久久| 999在线观看精品免费不卡网站| 欧美aa在线视频| 日韩精品一二三四| 欧美日韩国产一区精品一区| 捆绑调教美女网站视频一区|