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

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

前言

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

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

如在計算機中,相對于進程而言,上下文就是進程執(zhí)行時的環(huán)境。具體來說就是各個變量和數(shù)據(jù),包括所有的寄存器變量、進程打開的文件、內(nèi)存信息等??梢岳斫馍舷挛氖黔h(huán)境的一個快照,是一個用來保存狀態(tài)的對象。在程序中我們所寫的函數(shù)大都不是單獨完整的,在使用一個函數(shù)完成自身功能的時候,很可能需要同其他的部分進行交互,需要其他外部環(huán)境變量的支持,上下文就是給外部環(huán)境的變量賦值,使函數(shù)能正確運行。

請求上下文

關(guān)于WSGI

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

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

RequestContext 請求上下文 Request 請求的對象,封裝了Http請求(environ)的內(nèi)容 Session 根據(jù)請求中的cookie,重新載入該訪問者相關(guān)的會話信息。 AppContext 程序上下文 g 處理請求時用作臨時存儲的對象。每次請求都會重設(shè)這個變量 current_app 當(dāng)前激活程序的程序?qū)嵗?p>參見Flask上下文官方文檔 請求上下文 和 應(yīng)用上下文.

  1. application 指的就是當(dāng)你調(diào)用app = Flask(__name__)創(chuàng)建的這個對象app;

2.request 指的是每次http請求發(fā)生時,WSGI server(比如gunicorn)調(diào)Flask.call()之后,在Flask對象內(nèi)部創(chuàng)建的Request對象;

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

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

生命周期

current_app的生命周期最長,只要當(dāng)前程序?qū)嵗€在運行,都不會失效。 Request和g的生命周期為一次請求期間,當(dāng)請求處理完成后,生命周期也就完結(jié)了 Session就是傳統(tǒng)意義上的session了。只要它還未失效(用戶未關(guān)閉瀏覽器、沒有超過設(shè)定的失效時間),那么不同的請求會共用同樣的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上下文

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

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

app上下文

from flask import Flask,current_appapp = Flask(__name__)#如果在視圖函數(shù)外部訪問,則必須手動推入一個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(): # 在視圖函數(shù)內(nèi)部可以直接訪問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__)#應(yīng)用上下文#如果在視圖函數(shù)外部訪問,則必須手動推入一個app上下文到app上下文棧中with app.app_context(): print(current_app.name) #context_demo@app.route(’/’)def index(): # 在視圖函數(shù)內(nèi)部可以直接訪問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(): # 手動推入一個請求上下文到請求上下文棧中 # 如果當(dāng)前應(yīng)用上下文棧中沒有應(yīng)用上下文 # 那么會首先推入一個應(yīng)用上下文到棧中 print(url_for(’my_list’))if __name__ == ’__main__’: app.run(debug=True)

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

1.應(yīng)用上下文:

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

2.應(yīng)用上下文:

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

線程隔離的g對象

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲精品裸体| 久久亚洲国产| 亚洲麻豆一区| 亚洲精品裸体| 欧美亚洲三区| 国产精品99久久免费| 国产精品qvod| 麻豆理论在线观看| 五月天综合网站| 最新国产精品久久久| 日本欧美韩国一区三区| 久久不见久久见中文字幕免费 | 亚洲特色特黄| 最新日韩av| 日韩激情啪啪| 麻豆国产91在线播放| 日韩中文字幕高清在线观看| 欧美国产91| 日韩欧美高清一区二区三区| 麻豆精品久久久| 欧美片第1页| 久久都是精品| 国产精品极品国产中出| 日韩不卡在线| 四虎精品永久免费| 久久一区视频| 亚洲a在线视频| 亚洲精品一二三区区别| 日韩av影院| 日本免费一区二区三区四区| 免费一区二区视频| 成人污污视频| 久久xxxx| 欧美国产不卡| 丝袜a∨在线一区二区三区不卡| 美日韩一区二区三区| 亚洲精品中文字幕乱码| 国产精品porn| 三级欧美韩日大片在线看| 精品五月天堂| 亚洲精品系列| 91精品国产自产在线观看永久∴| 亚洲免费观看高清完整版在线观| www在线观看黄色| 奇米色欧美一区二区三区| 亚洲国产专区| 精品久久在线| 日韩中出av| 欧美精品资源| 精品资源在线| 日韩不卡手机在线v区| 欧美日韩在线观看视频小说| 国产精品2023| 日本在线不卡视频| 在线亚洲激情| 色爱综合av| 精品免费在线| 最近国产精品视频| 五月精品视频| 黑人精品一区| 麻豆精品视频在线| 日韩精品一区二区三区中文| 午夜久久美女| 日韩欧美不卡| 久久精品国产精品亚洲毛片| 亚洲精品看片| 日韩中文字幕麻豆| 精品欧美激情在线观看| 亚洲性色av| 精品精品国产三级a∨在线| 91精品丝袜国产高跟在线| 99视频在线精品国自产拍免费观看| 精品视频网站| 免费观看亚洲天堂| 国产乱码精品一区二区三区四区| 亚洲人成亚洲精品| 亚洲一区二区网站| 亚洲精品成人| 蜜桃视频欧美| 激情五月综合| 精品一区亚洲| 亚洲欧美伊人| 亚洲高清激情| 九九精品调教| 国产精品久久久久蜜臀| 精品一区二区三区在线观看视频| 国产精品视频3p| 免费的成人av| 午夜亚洲福利在线老司机| 日韩一级不卡| 日韩午夜av| 国产手机视频一区二区| 免费精品国产的网站免费观看| 精品欧美一区二区三区在线观看| 久久精品国产在热久久| 欧美激情91| 精品国产鲁一鲁****| 精品一区二区三区的国产在线观看| 久久精品凹凸全集| 91精品啪在线观看国产爱臀| 久久狠狠亚洲综合| 欧美日韩在线精品一区二区三区激情综合 | 国产农村妇女精品一二区| 国产综合亚洲精品一区二| 好看不卡的中文字幕| 激情五月综合| 亚洲伊人精品酒店| 日韩av字幕| 国产极品一区| 精品国产美女a久久9999| 丰满少妇一区| 日韩免费小视频| 亚洲一级网站| 99日韩精品| 午夜国产精品视频| 男人操女人的视频在线观看欧美| 蜜臀精品一区二区三区在线观看 | 久久精品影视| 亚洲电影在线一区二区三区| 丝袜国产日韩另类美女| 三级久久三级久久久| 欧美影院精品| 欧美国产专区| 国产精品亲子伦av一区二区三区| 麻豆精品久久久| 成人影视亚洲图片在线| 精品一区欧美| 蜜臀久久99精品久久久久宅男 | 国产一区二区三区四区二区| 日韩精品中文字幕第1页| 欧美精品一二| 亚洲免费观看高清完整版在线观| 日韩和欧美一区二区三区| 精品一区二区三区四区五区| 精品中国亚洲| 91精品国产自产在线观看永久∴| 免费视频久久| 国产亚洲人成a在线v网站| 高清av不卡| 欧美中文日韩| 日韩av有码| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产欧美一区二区三区精品观看| 国产一区二区三区四区二区| 午夜免费一区| 国产一级成人av| 私拍精品福利视频在线一区| 一区二区三区网站| 国产探花在线精品| 999精品色在线播放| 日韩成人午夜精品| 神马午夜久久| 国产欧美日韩免费观看| 免费不卡中文字幕在线| 久久国产精品色av免费看| 亚洲午夜在线| 国产伦理久久久久久妇女| 神马午夜久久| 91精品福利观看| 在线观看免费一区二区| 国产乱人伦精品一区| 欧美日韩国产高清| 精品久久免费| 亚洲激情另类| 免费在线小视频| 91成人在线网站| 亚洲一卡久久| 精精国产xxxx视频在线野外 | 日本在线观看不卡视频| 欧美特黄一级大片| 久久一区欧美| 欧美一级二级视频| 爽好多水快深点欧美视频| 中文字幕系列一区| 精品五月天堂| 国产欧美三级| 亚洲毛片视频| 国产精品字幕| 欧美精品不卡| 热久久久久久| 亚洲免费福利一区| 精品1区2区3区4区| 久久一级电影| 国内精品麻豆美女在线播放视频| 亚洲精品免费观看| 好吊一区二区三区| 欧美日韩视频免费观看| 麻豆久久一区| 日韩黄色免费网站| 亚洲欧美激情诱惑| 欧美久久精品一级c片| 欧美韩日一区| 婷婷综合一区| 亚洲欧美日韩综合国产aⅴ| 99久久精品费精品国产| 都市激情国产精品| 精品视频一二| 欧美激情福利| 国产精品亚洲四区在线观看| 日韩av一区二区三区四区|