新聞中心
比如說你有一個應(yīng)用函數(shù)返回用戶應(yīng)該跳轉(zhuǎn)到的 URL 。想象它總是會跳轉(zhuǎn)到 URL 的 ?next? 參數(shù),或 HTTP referrer ,或索引頁:

創(chuàng)新互聯(lián)公司公司2013年成立,公司以網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計、系統(tǒng)開發(fā)、網(wǎng)絡(luò)推廣、文化傳媒、企業(yè)宣傳、平面廣告設(shè)計等為主要業(yè)務(wù),適用行業(yè)近百種。服務(wù)企業(yè)客戶近1000家,涉及國內(nèi)多個省份客戶。擁有多年網(wǎng)站建設(shè)開發(fā)經(jīng)驗。為企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、創(chuàng)意設(shè)計、宣傳推廣等服務(wù)。 通過專業(yè)的設(shè)計、獨特的風(fēng)格,為不同客戶提供各種風(fēng)格的特色服務(wù)。
from flask import request, url_for
def redirect_url():
return request.args.get('next') or \
request.referrer or \
url_for('index')
如你所見,它訪問了請求對象。當(dāng)你試圖在純 python shell 中運(yùn)行這段代碼時, 你會看見這樣的異常:
>>> redirect_url()
Traceback (most recent call last):
File "", line 1, in
AttributeError: 'NoneType' object has no attribute 'request'
這有很大意義,因為我們當(dāng)前并沒有可以訪問的請求。所以我們需要制造一個 請求并且綁定到當(dāng)前的上下文。 ?test_request_context? 方 法為我們創(chuàng)建一個 ?RequestContext?:
>>> ctx = app.test_request_context('/?next=http://example.com/')
可以通過兩種方式利用這個上下文:使用 with 聲明或是調(diào)用 ?push()? 和 ?pop()? 方法:
>>> ctx.push()
從這點開始,你可以使用請求對象:
>>> redirect_url()
u'http://example.com/'
直到你調(diào)用 pop:
>>> ctx.pop()
因為請求上下文在內(nèi)部作為一個棧來維護(hù),所以你可以多次壓棧出棧。這在實現(xiàn) 內(nèi)部重定向之類的東西時很方便。
標(biāo)題名稱:創(chuàng)新互聯(lián)Flask教程:Flask 深入上下文作用域
標(biāo)題來源:http://m.fisionsoft.com.cn/article/ccehcoh.html


咨詢
建站咨詢
