小編給大家分享一下flask設(shè)置路由的方法是什么,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
成都創(chuàng)新互聯(lián)專(zhuān)注于黃平網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供黃平營(yíng)銷(xiāo)型網(wǎng)站建設(shè),黃平網(wǎng)站制作、黃平網(wǎng)頁(yè)設(shè)計(jì)、黃平網(wǎng)站官網(wǎng)定制、小程序定制開(kāi)發(fā)服務(wù),打造黃平網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供黃平網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
通常有以下幾種定義路由函數(shù)的方法:
1.使用flask.Flask.route() 修飾器。
2.使用flask.Flask.add_url_rule()函數(shù)。
3.直接訪問(wèn)基于werkzeug路由系統(tǒng)的flask.Flask.url_map.
一 、讓我們從最常用的@app.route()修飾器開(kāi)始。
def route(self, rule, **options): def decorator(f): endpoint = options.pop('endpoint', None) self.add_url_rule(rule, endpoint, f, **options) return f return decorator
可以看到修飾器是對(duì)add_url_rule函數(shù)的包裝,當(dāng)我們寫(xiě)如下代碼時(shí):
@app.route('/index.html') def index(): return "Hello World!"
實(shí)際上上面的代碼轉(zhuǎn)換成:
def index(): return "Hello World!" index = app.route('/index.html')(index)
也就是,rule = '/index.html', options = { }, 執(zhí)行decorator(index) 時(shí)會(huì)執(zhí)行self.add_url_rule(rule, endpoint, f, **options)
二、下面回過(guò)頭,來(lái)看看當(dāng)Flask運(yùn)行時(shí),一個(gè)Request來(lái)了,會(huì)發(fā)生什么,仍然從Flask.wsgi_app開(kāi)始閱讀。
已經(jīng)知道,當(dāng)一個(gè)Request到來(lái)時(shí),會(huì)首先push RequestContext和AppContext,在RequestContext中的init函數(shù)中有:
...self.url_adapter = app.create_url_adapter(self.request) ...self.match_request()
def create_url_adapter(self, request): if request is not None: return self.url_map.bind_to_environ(request.environ, server_name=self.config['SERVER_NAME']) ...
首先將Flask.url_map與當(dāng)前到來(lái)的Request中environ進(jìn)行綁定,獲得一個(gè)url_adapter。
def match_request(self): try: url_rule, self.request.view_args = \ self.url_adapter.match(return_rule=True) self.request.url_rule = url_rule except HTTPException as e: self.request.routing_exception = e
獲得url_adaptor之后,調(diào)用match_request,url_adapter.match()會(huì)返回一個(gè)元組view_args就是url_rule中的參數(shù),比如Rule(/
在url_rule和view_args被裝載到Request中后,我們繼續(xù)對(duì)wsgi_app中的response = self.full_dispatch_request()這個(gè)過(guò)程與路由相關(guān)的內(nèi)容進(jìn)行分析。
def full_dispatch_request(self): self.try_trigger_before_first_request_functions() try: request_started.send(self) rv = self.preprocess_request() if rv is None: rv = self.dispatch_request() ...
dispatch_request()處理完畢,將返回值儲(chǔ)存在rv變量中。通常,視圖函數(shù)會(huì)return render_template(...). 返回值接下來(lái)經(jīng)過(guò)一系列處理,發(fā)送到客戶端。
看完了這篇文章,相信你對(duì)flask設(shè)置路由的方法是什么有了一定的了解,想了解更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!