重定向(redirect)重定向(Redirect)就是通過(guò)各種方法將各種網(wǎng)絡(luò)請(qǐng)求重新定個(gè)方向轉(zhuǎn)到其它位置" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷(xiāo)資訊 > 建站知識(shí) > Flask框架——重定向(redirect)、url_for

Flask框架——重定向(redirect)、url_for

時(shí)間:2023-02-09 10:21:01 | 來(lái)源:建站知識(shí)

時(shí)間:2023-02-09 10:21:01 來(lái)源:建站知識(shí)

在上篇文章中,我們學(xué)習(xí)了Flask框架——response響應(yīng)對(duì)象及request對(duì)象,這篇文章我們來(lái)學(xué)習(xí)Flask框架——重定向、url_for。

重定向(redirect)

重定向(Redirect)就是通過(guò)各種方法將各種網(wǎng)絡(luò)請(qǐng)求重新定個(gè)方向轉(zhuǎn)到其它位置(如:網(wǎng)頁(yè)重定向、域名的重定向、路由選擇的變化也是對(duì)數(shù)據(jù)報(bào)文經(jīng)由路徑的一種重定向)。

其流程如下圖所示:

首先客戶端發(fā)送網(wǎng)絡(luò)請(qǐng)求給服務(wù)端,服務(wù)端接收到請(qǐng)求后返回了狀態(tài)碼為302、新的location給客戶端,客戶端發(fā)現(xiàn)返回的狀態(tài)碼為302,就自動(dòng)發(fā)送新的location中url網(wǎng)絡(luò)請(qǐng)求給服務(wù)端,服務(wù)端就根據(jù)請(qǐng)求內(nèi)容返回響應(yīng)內(nèi)容。

網(wǎng)頁(yè)需要重定向情況:

這種情況下,如果不做重定向,則用戶收藏夾或搜索引擎數(shù)據(jù)庫(kù)中舊地址只能讓訪問(wèn)客戶得到一個(gè)404頁(yè)面錯(cuò)誤信息,訪問(wèn)流量白白喪失;再者某些注冊(cè)了多個(gè)域名的網(wǎng)站,也需要通過(guò)重定向讓訪問(wèn)這些域名的用戶自動(dòng)跳轉(zhuǎn)到主站點(diǎn)等。

在Flask框架中提供了redirect()重定向方法,其語(yǔ)法格式如下:

redirect(location,code=302,Response=None)其中:

示例代碼如下所示:

from flask import Flask, redirectapp=Flask(__name__)#路由裝飾器@app.route('/index')def index(): return "<a href='/register'>首頁(yè)</a>"@app.route('/register')def register(): return "<a href='/redirect'>跳轉(zhuǎn)重定向頁(yè)面redirect</a>"@app.route('/redirect')def get_redirect(): return redirect('/index',code=302,Response=None)if __name__ == '__main__': app.run(port=8080,debug=True)這里我們使用了三次路由裝飾器與視圖函數(shù)并綁定URL鏈接,其URL分別為:

http://127.0.0.1:8080/indexhttp://127.0.0.1:8080/registerhttp://127.0.0.1:8080/redirect首先我們進(jìn)入第一個(gè)URL鏈接時(shí)并點(diǎn)擊首頁(yè)超鏈接就會(huì)跳轉(zhuǎn)到第二個(gè)URL鏈接頁(yè)面,跳轉(zhuǎn)頁(yè)面后,點(diǎn)擊跳轉(zhuǎn)重定向頁(yè)面的超鏈接就會(huì)跳轉(zhuǎn)到第一個(gè)URL鏈接頁(yè)面,而在瀏覽器那一欄的URL鏈接為:http://127.0.0.1:8080/index

那么問(wèn)題來(lái)了,按道理應(yīng)該是http://127.0.0.1:8080/redirect,,為什么會(huì)是:http://127.0.0.1:8080/index這個(gè)鏈接呢。這是因?yàn)槲覀兺ㄟ^(guò)redirect()方法重定向到第一個(gè)URL鏈接了。

按照上面的步驟依次打開(kāi)URL鏈接并點(diǎn)擊頁(yè)面中的超鏈接,打開(kāi)開(kāi)發(fā)者工具,如下圖所示:

我們發(fā)現(xiàn)在redirect中的狀態(tài)碼為302,點(diǎn)擊redirect,如下圖所示:

當(dāng)客戶端發(fā)送http://127.0.0.1:8080/register的網(wǎng)絡(luò)請(qǐng)求時(shí),服務(wù)端返回響應(yīng)的響應(yīng)碼為302,客戶端發(fā)現(xiàn)響應(yīng)碼為302,就找到location中的URL,請(qǐng)發(fā)送該URL的網(wǎng)絡(luò)請(qǐng)求,所以我們?cè)趫D中可以看到有兩個(gè)index響應(yīng)。

url_for

在實(shí)際開(kāi)發(fā)中,路由裝飾器和視圖函數(shù)綁定的URL鏈接可能會(huì)很長(zhǎng)很長(zhǎng),那么我們可以在路由裝飾器@app.route()中添加endpoint參數(shù),該參數(shù)作用是為視圖函數(shù)起別名,語(yǔ)法結(jié)構(gòu)如下所示

@app.route('/',endpoint='視圖函數(shù)的別名')為視圖函數(shù)起別名,那么怎么使用該別名呢?這時(shí)我們可以使用url_for()方法,語(yǔ)法結(jié)構(gòu)為:

url_for('視圖函數(shù)名或視圖函數(shù)別名')示例代碼如下所示:

from flask import Flask, redirect, url_forapp=Flask(__name__)@app.route('/indexsdafsfsalkdhasfkljsdalf',endpoint='shouye') #添加endpoint參數(shù)為視圖函數(shù)其別名def index(): return "<a href='/redirect'>首頁(yè)</a>"@app.route('/redirect') def get_redirect(): return redirect(url_for('shouye'),code=302,Response=None) if __name__ == '__main__': app.run(port=8080,debug=True)首先我們?yōu)榈谝粋€(gè)視圖函數(shù)添加了endpoint參數(shù)的值,該值就是視圖函數(shù)的另一個(gè)名字,這樣我們就可以通過(guò)url_for()方法并傳入endpoint參數(shù)的值,就可以指向返回第一個(gè)視圖函數(shù)的URL鏈接頁(yè)面。

除了在Flask程序中使用url_for()方法,我們還可以在HTML模板文件中使用url_for()方法,HTML模板文件示例代碼如下所示:

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <form action="{{ url_for('use_urlfor') }}" method="get"> <input type="submit" value="提交"> </form></body></html>這里我們?cè)贖TML模板中使用了url_for()方法并傳入了視圖函數(shù)名,當(dāng)然也可以傳入視圖函數(shù)的別名。

注意:在HTML模板文件中使用url_for()方式時(shí),需要將該方法用雙花括號(hào)圍住。

Flask程序示例代碼如下所示:

from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')def hello_world(): return render_template('index.html') #渲染index.html模板文件@app.route('/use_urlfor',endpoint='index')def use_urlfor(): return '在模板文件中使用url_for' #返回字符串if __name__ == '__main__': app.run()運(yùn)行Flask程序,訪問(wèn)http://127.0.0.1:5000/并點(diǎn)擊提交就會(huì)跳轉(zhuǎn)頁(yè)面,跳轉(zhuǎn)的頁(yè)面顯示內(nèi)容為:在模板文件中使用url_for。

好了,有關(guān)Flask框架——重定向、url_for的知識(shí)就講到這里了,感謝觀看!?。∠缕恼聦W(xué)習(xí)Flask框架——模板變量、控制塊、過(guò)濾器?。。?br>
公眾號(hào):白巧克力LIN

- END -

關(guān)鍵詞:

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉