怎樣才能徹底掌握flask?怎麼個學習順序比較合理?

只了解基本的python語法。看了the foudation of python web programming的web部分,感覺沒啥收穫。wsgi在看,但看不懂。。有點不知道從何學起了。。。大蝦們指點一下吧。


我有很多東西在一開始也看不懂,反而是在自己寫項目和工作中去領悟出來的。單靠看書、看博客肯定不夠,一定要邊學邊練。我給你分幾步:

1. 了解理論。也就是你要清楚「視圖」、「模板」、「模型」、「MVC」、「中間件」、「REST API」這些使用Web框架要用到的東西。我個人當時也是看了很多相關的文章,但還是一知半解。

2. 了解一些Linux、網路、資料庫的知識。要求就是能在Linux執行一些系統命令,安裝包,使用資料庫寫SQL,知道TCP/IP這些內容。

3. 看Flask的官方文檔。英語不好也可先找中文的看,但是還是推薦直接看英文的,因為有些翻譯的理解和原意還是有誤差,容易誤導。

4. 只寫後端。也就是只寫Python部分,甚至不涉及模板。先寫一個小的應用。比如仿 https://github.com/Runscope/httpbin ,它就是Flask寫的,你看著網站可以先簡化一些不會的東西。直到你知道了怎麼路由,怎麼返回JSON格式的內容。

5. 學習寫模板。可以把你做的應用加上模板,實現更複雜的功能,當然這個時候頁面很簡陋。

6. 學習在Flask應用中操作庫。建議MongoDB和MySQL都要熟悉一下,這是時候也要學習些HTTP METHOD都有哪些以及在什麼場景下該用哪個方法,趁機也了解下HTTP狀態碼。這個時候HTTP協議可以去學了,建議去讀《圖解HTTP》,看的輕鬆。

7. 還是學一些前端的內容,前端包含HTML,CSS和Javscript,先從w3cshool開始,這個時候建議買幾本對應的書看看。了解Ajax,知道如何讓前後端通過Ajax通信。

8. 學習前端框架,對於新手,我建議學習bootstrap和jquery這2個庫,熟悉了它們前端部分就告一段落。

9. 這個時候你已經有能力寫一個相對有意思的網站了,你該找點創意做個大事。也就是看起來比較遙遠的目標。比如寫個小知乎,仿個開發者頭條之類的。你得考慮session、管理後台、登錄與註冊、Oauth2、安全這些大型網站齊備的內容。

10. 從9過度到這裡還是要花不少時間的,走到這裡,網站基本知識就差不多了,那麼你要了解一個網站的架構了,比如緩存,文件系統,分散式,服務化,反向代理、CDN、DNS等等,推薦一本好書: 《大型網站技術架構 核心原理與案例分析》(李智慧)【摘要 書評 試讀】,一定要看看。

11. 產品準備好了,你得研究下測試和持續集成,如何快速部署和回滾,如果及時發現問題,出現了性能問題怎麼DEBUG和優化等知識。

嗯,差不多未來1年你有的忙了。

如果你認為用flask寫了項目就是會web開發了,naive,我的觀點是儲備其他知識要先於深入理解flask,建議在9的初期再可以買本《Flask Web開發:基於Python的Web應用開發實戰》看看,或者考慮買我的書 ^.^

但是最好的學習Flask的辦法就是去讀它和它的依賴的源代碼。

但是最好的學習Flask的辦法就是去讀它和它的依賴的源代碼。

但是最好的學習Flask的辦法就是去讀它和它的依賴的源代碼。

重要的事情說三遍

歡迎關注本人的微信公眾號獲取更多Python相關的內容(也可以直接搜索「Python之美」):

http://weixin.qq.com/r/D0zH35LE_s_Frda89xkd (二維碼自動識別)


推薦Flask Web Development這本書,循序漸進每一小節都有git tag,很方便看代碼。

不要太關注細節,如你提到的wsgi,先整體,後細節,而疑惑就需要自己進入源碼找答案了。

要深入學習還是需要看源碼,了解flask的原理。比如context,request, session的原理;如何增加模板filter,如何注入方法;flask_sqlalchemy的db session也是構建在context上,具體原理;flask_cache的細節,memoize如何通過類方法清空實例方法的cache;jinja2的filter.py中的filter是否熟悉,bccache是否對你有用,深入了解模板原理。

當遇到阻塞請求,如調用外部api時,如何提高系統吞吐量;用flask如何實現長連接(Comet)。。。(藉助gevent,想明白後你就會發現其實tornado最有優勢的優點其實不過如此)

其實單純的一個框架是有限的,難點在於如何和其它組件更好更高效的工作。


首先必須贊一下 pocoo,pocoo 的文檔很規範,解釋得很清晰。建議樓主直接看英文原文來學習 Flask。

接著回答問題。

我認為學習 Flask 難點不在於如何使用 Flask,而是對 Python 的使用,以及對 Web 框架的理解。理解如何使用 Web 框架開發網站的話,Flask 學習起來應該是很順利的。

有一些概念是需要明白的,例如 MVC 開發模式、Route 定義、HTTP Method 之類。

當然 Flask 還有自己的特點,如 Blueprint 和 Testing 部分,建議樓主學一學。

對 Flask 框架基本了解之後,可以看看 Github 上一些基於 Flask 的網站源碼,例如 June (pythoncn/june 路 GitHub) 。

最後,聰明的開發者是不會自己早輪子的。下面是 Python-China 一網友收集的 Flask 資源:

humiaozuzu/flask-dev-bookmarks 路 GitHub

https://github.com/humiaozuzu/flask-dev-bookmarks/blob/master/plugins.md


以下內容節選自我的博客《Flask入門指南》,不知道對你有沒有幫助。

Flask 入門指南

--------

Flask入門

Flask上手非常容易,僅僅看完Flask官方文檔中的Quickstart部分,就可以實現簡單的網站了。當然,網站看起來好不好,與html, CSS和js水平有關,這不在Flask的使用範圍之內。

Flask精通

若要精通Flask,僅僅通過Quickstart快速入門完全不夠,那怎樣才能把Flask用好呢?用好Flask沒什麼特殊的捷徑,靠的依然是『多使用、多思考、多看他人優秀的代碼』,經驗可能是編程世界裡最恰當稱之為掌握新技術的捷徑的東西,而經驗的積累卻又是一個漫長的過程,靠的也是『多使用、多思考、多看他人優秀的代碼』。Flask的精通要靠自己努力,優秀的資料可以分享。我在這裡推薦幾個我覺得不錯的資料,歡迎大家補充。

(1) Flask官方文檔

Flask官方文檔寫的還是相當不錯的,作為學習Flask的第一手資料沒有問題,且Flask官方的Snippets,對開發很有幫助,也能避免開發者花太多時間考慮重複的輪子如何開發

(2) Flask Web開發

這本書相當不錯,通過這本書的學習,基本能做到Flask從入門到精通,也是我建議的第一手Flask學習資料。書中介紹的Flask構建大型項目的架構方式,很是受用,很有實際意義。

(3) miguelgrinberg.com

上面圖書作者的博客,是積累Flask開發經驗的好資料

(4) Write a Tumblelog Application with Flask and MongoEngine

這是MongoDB官方文檔中的一個教程,也是學習Flask開發的一個很好案例,尤其適合Flask+MongoDB開發的應用場景

(5) Flask 源碼

Flask 本身是一個非常優秀的Python庫,閱讀其源碼對理解Flask及提高Python開發水平非常有幫助。

(6) The Hitchhiker』s Guide to Python!

這個資料雖然不直接與Flask有關,但對初學者,絕對有學習的價值


我這裡有兩個Flask的項目,非常適合用來入門。可以說,是目前互聯網上質量較高的Flask學習資料。這兩個項目的每一個commit都被精心準備,用以演示一個功能。並且,每個commit都能夠運行。通過運行各個commit查看界面的變化,以及通過代碼變更查看功能實現,對大家學習Flask開發,有很大的幫助。

項目一:今日頭條

今日頭條項目就是將各大網站的新聞頭條和天氣預報拿過來,做了一個聚合操作。這個項目不涉及前端、不涉及資料庫,只涉及爬蟲(一點點),也沒有用到Flask插件,所以非常簡單,很適合用來入門。

github地址:lalor/headlines

項目二:todo list

todo list(lalor/todolist)是代辦事項列表,效果圖如下:

支持登錄、退出、增加todo、刪除已完成的todo、修改未完成的todo。使用到的插件包括Flask-Bootstrap、Flask-wtf、Flask-SQLAlchemy和Flask-login。當然,還有一些沒有實現,這個項目主要用於教學用,方便新同學學習。

希望大家喜歡。


看源碼最快


動手寫最快,先實現增刪改查,再一步一步增加功能。

1、增加分頁

2、增加評論

3、增加用戶註冊、登錄、註銷。

4、增加用戶郵件驗證、增加驗證碼。

5、增加RESTFUL API

。。。。。。。。。


1. 最起碼理解網路,http這層肯定要理解

2. 熟悉python,這是個過程,學習加實踐

3. 學習官方文檔,官方文檔是最全的也是意圖最明確的。

4. 寫demo,不會寫多看看別人怎麼寫,自己就會了。

5. 研究某一點,深入到源碼,有時候源碼也看不懂可以請教一下其他人。

對於想深入flask內部我覺得由簡到難需要看的(自己感覺)。

1. config原理

2. 路由原理

3. Wsgi介面調用

4. 理解session

5. 理解threading.local

6. 理解flask自己封裝的thread local

7. 理解g和request

8. 理解app context和request context


每個人的基礎不同,接受知識的能力不同,路線也不可能完全相同。

學習過程並不是一條直線,而是彎彎曲曲無法描述的曲線。

說這些並不是危言聳聽,也不是打擊積極性,更多是的是希望題主正視這個問題。在自己學習的過程中我被老手噴過,被新手嘲笑過,也跟人互噴過,就是這麼曲折。

而我覺得最重要的 就是 你有一個明確的目標,

你可以不知道代碼是做什麼,可以不了解裝飾器,不了解任何東西,但是你要知道你現在做什麼。

我覺得這才是最重要的,而不是長長的列出一個單子,第一天做什麼第二天作什麼,因為你會完不成你的任務,當然你可以把目標定的小一點,問題是你怎麼會知道哪些目標小,哪些目標大呢?

即使在老手看來很簡單的概念,對於新手來說也是一條鴻溝。

這就是小馬過河,老牛覺得淺,松鼠覺得深,其實沒有任何參考價值,聽一個樂就好。

至於工作,大家認真努力的樣子,很迷人。

和有趣的人做有趣的事情。


其實無所謂WSGI之類的東西。我自己一直做演算法、策略、數據相關的工作,幾乎不會web開發。但是偶爾還是要做一些小工具小demo,所以也需要自己寫一點小的web app。所以對於我這種,大致理解web開發的基本原理,入個門就行,真正用的時候知道怎麼查就OK。如果是專業寫web app的人,那麼還是需要通過實際項目的洗禮。

我自己學Flask,主要就讀了《Flask Web Development》,然後take一些notes,能達到入門然後自己寫寫小工具、小demo的水平。

讀完這本書以後,總結起來就一張圖(原創):

(看的英文原版,做notes的時候也是用英文,但鑒於我半吊子英文水平,如果有語法錯誤、用詞錯誤的,請指正)

這個圖基本上涵蓋了Flask的所有核心feature:

1. 把客戶端的請求封裝成Request對象直接給你

2. 定義一下路由規則(Route),什麼函數處理什麼URL

3. 寫一下處理請求的業務邏輯(View Function),接到一些請求要做什麼事情返回什麼

4. 小應用、小工具就別用template了,直接在view function裡面返回就得了

5. Blueprint在小應用的時候就別用了,應用變大的時候再用,它就是用來進行代碼組織的

6. 各種插件最有用的就是WTForm,做表單的時候異常簡單

部署的話,小應用、小工具,Flask自帶的web server直接用就行。要對外服務的時候前面掛Guniform,搞nginx反向代理再研究。最重要的是先把核心業務邏輯實現了再說。

在學的時候可能會因為基礎,糾結以下幾點:

1. context variable怎麼理解

-- 接受它就行了,甭想它怎麼實現的,給你的request就是當前請求,甭糾結看上去很奇怪

2. decorator是什麼東西

-- 第一次遇到肯定是路由的時候碰到,就當是特殊語法就完事兒了。先粗枝大葉對Flask整體有個印象以後再來細究怎麼用decorator實現路由。

3. 用ORM的時候會遇到descriptor

-- 整個ORM大概看看知道個概念,知道能幹啥就行了。等真正用的時候再看。

這本書吧,重點把第一部分看完(看兩遍或以上)就能比較清晰地理解web開發的基本邏輯和Flask的基本邏輯。第二部分並不是必須,但確是一個非常好的walk through。

最後,這本書雖然是2014年的,但現在看也不過時。


直接看官方文檔,寫的很清楚;

看The Flask Mega,很快就能入門。開源中國上有翻譯。

github上的flask相關項目拿下來看看


我們都知道,想要精一行,必須通十行。

比如你想精通Flask,就不僅僅是要整天專研Flask,還需要你懂HTML、CSS、JavaScript、python、SQL,當你程序寫好了,要部署還需要懂Linux,懂運維。

所以在「徹底掌握flask」這條路上,建議除了學習flask之外,還要把精力放在Web前端後端的「本質」的學習,flask只是術,而後者是道。


flask?很難學嗎?

wsgi可以看很多的例子,比如這個http://archimedeanco.com/wsgi-tutorial/

flask本身簡單到不能再簡單,所以如果你覺得難,那麼顯然是沒學好基礎,建議你先從基礎學起,比如web開發基本知識:session管理啊,template啊神碼的,然後學flask一天就差不多了……


同在學flask,本來看中文教程,現在準備放棄。。

在跟著教程做的時候,遇到幾個問題:

1.自己不理解Web開發的基本知識,不知道Web框架應該有哪些作用

2.中文文檔坑啊!步驟 2: 應用設置代碼這裡,步驟2後面的鏈接是步驟4(坑了之後才發現鏈接錯誤),跟做完後無法運行,對照英文文檔後發現還漏了一些代碼沒說到。。

打算按之前答案說的,先了解Web框架的基礎知識吧。

剛剛搜了一下,推薦這篇文章:【譯】什麼是 web 框架?


學flask看這個教程 The Flask Mega-Tutorial, Part III: Web Forms 特別好


比較好的教程

模板 — flask mega-tutorial 1.0 documentation

當然也可以看英文原版

The Flask Mega-Tutorial, Part I: Hello, World!

幾個例子:

1 Simple Flask Example

2 GitHub - mattupstate/flask-social-example: An application that serves as a working example for Flask-Social


個人也正在學習,不過在徹底掌握之前,個人認為順序如下:

先去學習 HTML 再去學習 Jinja 2 模板語法,最後再看 Flask 官方文檔!


每看到一個API,一個功能,先把他用順了,看栗子和文檔就夠啦,更重要的是再深挖一下內部實現,然後你會發現基本原理爸媽都能聽懂。


跟著flask web development這本書在一步步操作 但是一會兒該這個文件一會兒增減那個文件 不知道為什麼要這樣


看國外優秀開源項目的源碼,比如Flasky開源社交博客的,裡面涉及的不僅僅是Flask,就像前面的朋友說的,前端後台,Linux,網路,資料庫,還有很多你需要去了解。


我想跟著這個問題問問各位,根據以上的回答呢,我覺得要學flask,首先得學習一部分網頁開發的知識,然後是要能熟悉運用python進行編碼,最後再看flask文檔或項目源碼跟著學,我這樣理解對嗎?同時我也想問問如果學flask需要先學習一部分知識,就像前面有人說的「web開發基本知識:session管理啊,template啊神碼的」,能不能具體講講這部分「必要知識」是什麼?(因為我是先學python編程的,現在想轉入用python做網頁開發,所以想問問有哪些「基本知識」要學,求幫忙!)


我11年開始使用flask,我的建議是不要看任何中文資料。

入門:官方的文檔就絕對夠了,對python的理解也很有提升:Welcome to Flask

進階:從github上找基於flask的優秀開源項目


@董偉明 大大都說了很多你寫Python熟練之後的提升,我來說說之前吧。

所謂基礎語法是指循環,選擇和順序執行吧

還有很多東西要學:字典,列表,集合,lamdba表達式,切片,生成器……還有很多東西,去看看@廖雪峰 大大的教程吧,看完才敢說自己懂基礎吧。

學好以下三點我覺得對於flask的使用會有質的突破:

一:裝飾器

二:類以及類的繼承與多態

三:flask是web服務,那麼至少要懂web基礎吧,HTTP要懂吧

提高的唯一途徑只有練習。先從爬蟲開始吧…

最後@知乎小管家 ,發現一個bug,在匿名身份下,點擊右上角依舊是使用匿名身份…bug重現過程:使用匿名身份回答問題,保存發布。在查看回答時,點擊右上角依舊是匿名身份。此時點擊右上角使用匿名身份,再次點擊右上角是取消匿名身份。感覺這玩意是保存在本地未上傳啊,哦,找工作中,貴乎收不?


推薦閱讀:

Django 有哪些局限性?
Python有哪些殺手級超牛逼框架或庫或應用?
PHP 比 Python 牛在哪?
CPython是什麼?PyPy是什麼?Python和這兩個東西有什麼關係呢?Python的底層使用什麼語言實現?學習Python需要學習底層實現嗎?
requests 和 scrapy 在不同的爬蟲應用中,各自有什麼優勢?

TAG:Python | Flask | Python框架 |