第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何閱讀Flask源碼?

如何閱讀Flask源碼?

qq_笑_17 2018-10-14 13:33:39
最近打算閱讀一下Flask的源碼,由于自己前讀的一些代碼,常是一些某個(gè)庫(kù)的使用方法的代碼,比如urllib2該如何使用等。而對(duì)于像框架之類(lèi)的代碼沒(méi)有閱讀過(guò),嘗試去讀的時(shí)候,發(fā)現(xiàn)無(wú)從下手:不知道從哪個(gè)文件開(kāi)始讀對(duì)于某個(gè)模塊,到底怎么個(gè)用法,不清楚該如何測(cè)試另外,由于是Flask就是Werkzeug+Jinja2而成的,是不是有必要先從后兩個(gè)開(kāi)始閱讀呢?麻煩大家分享下你閱讀代碼的方法,是從哪里入手的,如何理解某個(gè)模塊是如何實(shí)現(xiàn)的?
查看完整描述

1 回答

?
慕桂英546537

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個(gè)贊

去年做過(guò)一個(gè)不大不小的Flask項(xiàng)目,這邊分享下我的做法:

讀Flask源碼確實(shí)需要讀Werkzeug的源碼,Jinja2的源碼則可以先晾在一邊,原因是在框架結(jié)構(gòu)上Flask與Werkzeug結(jié)合的更緊些,例如我們?cè)谝淮蜨TTP請(qǐng)求上下文中使用的request實(shí)例,就是通過(guò)Werkzeug的LocalProxy包裝實(shí)現(xiàn)的。而Jinja2則完全集中在模板渲染上,如果題主目前的主要任務(wù)是理清“HTTP請(qǐng)求響應(yīng)流”在框架代碼中的走向,那么Jinja2部分可以先作為黑匣子。

怎么切入,我認(rèn)為最好的方法是在您的View Handler中用ipdb下一個(gè)斷點(diǎn),然后啟動(dòng)程序并在瀏覽器中訪問(wèn)該頁(yè)面,當(dāng)運(yùn)行到斷點(diǎn)時(shí),Python進(jìn)程那邊已經(jīng)切換到ipdb的調(diào)試模式,您可以通過(guò)步進(jìn)并隨時(shí)查看當(dāng)前代碼所處的文件、對(duì)應(yīng)行數(shù),以及當(dāng)前的堆棧幀。

第一次用ipdb下斷點(diǎn)查看時(shí),不需要在意當(dāng)前到達(dá)的每一步位置的上下文代碼,只要記住我在哪個(gè)文件的哪個(gè)函數(shù)(方法)中,這樣一遍走下來(lái),您對(duì)一次HTTP請(qǐng)求會(huì)依次經(jīng)歷Flask框架中的哪些部分有個(gè)初步印象。

接下去,就是打開(kāi)這些“框架部分”對(duì)應(yīng)的源碼文件進(jìn)行宏觀閱讀了,這是第二步,如果有經(jīng)驗(yàn),能夠憑直覺(jué)一眼看出(或通過(guò)方法名、或通過(guò)代碼的自文檔化)此處是在做什么。如果第一步用ipdb調(diào)試是在腦海中對(duì)框架打輪廓,那么第二步做完后,已經(jīng)對(duì)這個(gè)框架實(shí)現(xiàn)有較為清晰、整體的認(rèn)識(shí)了。

第三步,根據(jù)第二步所建立的認(rèn)識(shí),繼續(xù)使用ipdb打斷點(diǎn)并調(diào)試,但在這次,需要仔細(xì)地“打量”當(dāng)前上下文,例如上面說(shuō)的查看堆棧幀、或者通過(guò)locals()、globals()查看當(dāng)前名字空間的變化,第三步的作用是為第二步所建立的概念模型進(jìn)行實(shí)踐驗(yàn)證,以加強(qiáng)理解

如此反復(fù)二三兩步,對(duì)框架主要部分實(shí)現(xiàn)的認(rèn)識(shí)則會(huì)愈加清晰,把握住框架主脈絡(luò)后,對(duì)于其他模塊,例如signals、session,則可以逐個(gè)擊破了。

另外,F(xiàn)lask還會(huì)直接依賴(lài)itsdangerous這個(gè)庫(kù),我認(rèn)為也可以了解下。

我現(xiàn)在還在看Flask源碼,原因是它的文檔字符串寫(xiě)得很棒,可以作為我在其他項(xiàng)目使用sphinx-doc組件實(shí)踐時(shí)很好的模板:)。


查看完整回答
反對(duì) 回復(fù) 2018-10-21
  • 1 回答
  • 0 關(guān)注
  • 1071 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)