摘要:今天同學(xué)問(wèn)了我一個(gè)關(guān)于的問(wèn)題,我之前也看了一下慕課七月老師講的項(xiàng)目,正好碰到過(guò),所以也給大家分享一下。之前在寫(xiě)項(xiàng)目的時(shí)候也有用到,老師講的是代表了當(dāng)前項(xiàng)目的,當(dāng)然寫(xiě)完項(xiàng)目也沒(méi)有任何問(wèn)題,但是通過(guò)這次學(xué)習(xí),我才發(fā)現(xiàn),好坑吶,真怕不用就忘了。
今天同學(xué)問(wèn)了我一個(gè)關(guān)于current_app的問(wèn)題,我之前也看了一下慕課七月老師講的flask項(xiàng)目,正好碰到過(guò),所以也給大家分享一下。
【current_app】
之前在寫(xiě)項(xiàng)目的時(shí)候也有用到current_app,老師講的是代表了當(dāng)前項(xiàng)目的app,當(dāng)然寫(xiě)完項(xiàng)目也沒(méi)有任何問(wèn)題,但是通過(guò)這次學(xué)習(xí),我才發(fā)現(xiàn),好坑吶,真怕不用就忘了。大家看一下下面這段代碼
from flask import Flask, current_app app = Flask(__name__) print(app) #輸出結(jié)果:
相信大家對(duì)這段代碼是沒(méi)有問(wèn)題的,也不知道有啥作用,那么請(qǐng)看下面這段代碼
from flask import Flask, current_app app = Flask(__name__) print(app) #輸出結(jié)果:app2 = current_app print(app2) #輸出結(jié)果:竟然報(bào)了一大堆的錯(cuò)誤
錯(cuò)誤信息是這樣子的:RuntimeError: Working outside of application context.意思是說(shuō)我們?cè)趹?yīng)用上下文之外運(yùn)行的,這究竟是咋回事,請(qǐng)看下面這幅圖
原來(lái)在flask內(nèi)部維護(hù)者兩個(gè)線程隔離的棧,current_app指向了AppContext(應(yīng)用上下文)中的棧頂,request指向了RequestContext(請(qǐng)求上下文)棧頂,當(dāng)請(qǐng)求進(jìn)入的時(shí)候,Request對(duì)象被壓入棧,從而request有了指向處理請(qǐng)求,接下來(lái)會(huì)判斷AppContext棧頂是否為空,若為空則向棧中壓入一個(gè)AppContext對(duì)象,即app,從而current_app就有了指向,所以我們?cè)陧?xiàng)目中使用是沒(méi)有報(bào)錯(cuò)的,而我們上面的代碼不是在請(qǐng)求中實(shí)現(xiàn)的所以AppContext棧頂為空,current_app并沒(méi)有指向一個(gè)AppContext對(duì)象,怎樣解決呢?
from flask import Flask, current_app app = Flask(__name__) print(app) #輸出結(jié)果:with app.app_context(): app2 = current_app print(app2) #輸出結(jié)果:
這里我們使用了with,其app_context()返回一個(gè)AppContext對(duì)象,而其又實(shí)現(xiàn)了__enter__與__exit__分別讓AppContext對(duì)象,即app入棧和出棧,完成了此操作。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/42953.html
摘要:事件冒泡一個(gè)簡(jiǎn)單,但是坑了我無(wú)數(shù)回的知識(shí)點(diǎn)與的交互通過(guò)事件來(lái)實(shí)現(xiàn)。而瀏覽器的事件流是一個(gè)非常重要的概念。不去討論那些古老的瀏覽器有事件捕獲與事件冒泡的爭(zhēng)議,只需要知道在中規(guī)定的事件流包括了三個(gè)部分,事件捕獲階段處于目標(biāo)階段事件冒泡階段。 打算封裝一個(gè)彈窗組件,做的時(shí)候忘記了考慮事件冒泡的因素,結(jié)果被坑得不要不要的。為了解決自己的問(wèn)題,去查閱了不少資料,把事件流相關(guān)的知識(shí)都給總結(jié)一下。 ...
摘要:事件冒泡一個(gè)簡(jiǎn)單,但是坑了我無(wú)數(shù)回的知識(shí)點(diǎn)與的交互通過(guò)事件來(lái)實(shí)現(xiàn)。而瀏覽器的事件流是一個(gè)非常重要的概念。不去討論那些古老的瀏覽器有事件捕獲與事件冒泡的爭(zhēng)議,只需要知道在中規(guī)定的事件流包括了三個(gè)部分,事件捕獲階段處于目標(biāo)階段事件冒泡階段。 打算封裝一個(gè)彈窗組件,做的時(shí)候忘記了考慮事件冒泡的因素,結(jié)果被坑得不要不要的。為了解決自己的問(wèn)題,去查閱了不少資料,把事件流相關(guān)的知識(shí)都給總結(jié)一下。 ...
摘要:原因其實(shí)這個(gè)報(bào)錯(cuò)不需要下載最新文件,而是文件沒(méi)有放到正確的位置。重啟電腦后按或進(jìn)入界面不同主板型號(hào)進(jìn)入所需按鍵不同。端口映射環(huán)境下可能不存在這個(gè)問(wèn)題坑在下部署了應(yīng)用服務(wù)并進(jìn)行了端口映射。 2018?年?3?月?6?日 Docker安裝 環(huán)境:windows7 安裝包:DockerToolbox-17.10.0-ce.exe (下載地址:http://mirrors.aliyun.co...
閱讀 993·2021-11-24 09:39
閱讀 2214·2021-11-16 11:54
閱讀 2096·2021-11-11 17:22
閱讀 2383·2021-09-30 09:55
閱讀 3612·2021-08-12 13:22
閱讀 1638·2019-08-30 15:44
閱讀 1180·2019-08-29 12:12
閱讀 3275·2019-08-27 10:58