新聞中心
通常有以下幾種定義路由函數(shù)的方法:

成都創(chuàng)新互聯(lián)公司服務(wù)項目包括南漳網(wǎng)站建設(shè)、南漳網(wǎng)站制作、南漳網(wǎng)頁制作以及南漳網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,南漳網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到南漳省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
1.使用flask.Flask.route() 修飾器。
2.使用flask.Flask.add_url_rule()函數(shù)。
3.直接訪問基于werkzeug路由系統(tǒng)的flask.Flask.url_map.
一 、讓我們從最常用的@app.route()修飾器開始。
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可以看到修飾器是對add_url_rule函數(shù)的包裝,當(dāng)我們寫如下代碼時:
@app.route('/index.html')
def index():
return "Hello World!"實際上上面的代碼轉(zhuǎn)換成:
def index():
return "Hello World!"
index = app.route('/index.html')(index)也就是,rule = '/index.html', options = { }, 執(zhí)行decorator(index) 時會執(zhí)行self.add_url_rule(rule, endpoint, f, **options)
二、下面回過頭,來看看當(dāng)Flask運行時,一個Request來了,會發(fā)生什么,仍然從Flask.wsgi_app開始閱讀。
已經(jīng)知道,當(dāng)一個Request到來時,會首先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)前到來的Request中environ進行綁定,獲得一個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()會返回一個元組view_args就是url_rule中的參數(shù),比如Rule(/
在url_rule和view_args被裝載到Request中后,我們繼續(xù)對wsgi_app中的response = self.full_dispatch_request()這個過程與路由相關(guān)的內(nèi)容進行分析。
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()處理完畢,將返回值儲存在rv變量中。通常,視圖函數(shù)會return render_template(...). 返回值接下來經(jīng)過一系列處理,發(fā)送到客戶端。
文章名稱:創(chuàng)新互聯(lián)Python教程:flask怎么設(shè)置路由
路徑分享:http://www.fisionsoft.com.cn/article/cdjhdpg.html


咨詢
建站咨詢
