repo: github.com/alphardex/p…python
最近把《django by example》的項目差很少都擼完了,是時候該寫個小結了。git
我的體會:django的api能夠說是不少很全,這輩子都不可能全記住的。github
其實,懂得速查文檔就沒有什麼大問題。redis
大量的封裝雖然犧牲了必定的靈活性,但大大提升了開發效率,或許這就是django的哲學吧。sql
準備
首先,你能夠用django-admin來生成你的項目。shell
不過筆者更建議用一個腳手架來快速生成一個啓動模板。數據庫
核心工做流
Django的核心是MVC,更準確來講是MVT(Model-View-Template)django
首先建立app,並在settings中的INSTALLED_APPS添加其配置,在全局urls中經過include引入app的全部urlflask
接下來纔是最關鍵的3步:bootstrap
- 在models.py中定義好數據模型並遷移它們
- 在views.py中編寫視圖函數,並在urls.py中爲其建立相應的映射
- 在templates文件夾中編寫要渲染的模板HTML
數據模型的定義其實就是定義各類各樣的字段,還有個Meta類能夠定義一些元數據(好比字段的排序等),此外你也能夠爲模型封裝一些method來簡化視圖的編寫。
視圖函數的編寫主要涉及如下方面:模型的CRUD、表單的處理、模板的上下文渲染(必須熟悉HTTP)
視圖函數分2種:函數和類(即FBV和CBV)。二者各有利弊,根據需求自行權衡。目前來講後者在django中比較流行。
給視圖添加額外功能:FBV用裝飾器,CBV用Mixin。
模板的編寫主要涉及:上下文的渲染、if、for、with語句、過濾器、繼承等
後臺管理
其實在定義完數據模型後就已經能夠從admin開始玩起了(初次進入須要建立一個超級用戶)。
把數據模型統統註冊上去,以便進行CRUD。
其餘雜項
- 數據模型的Meta元信息(ordering、abstract等)
- 利用Manager來簡化查詢
- 熟悉QuerySet的各類接口和查詢方法(好比Q、select_related等)
- 懂得如何優化查詢
- 利用Library實現自定義標籤
- 建立sitemaps來優化SEO
- 建立feeds來提供RSS訂閱功能
- 利用Postgresql來實現全文搜索
- 利用Ajax來優化用戶體驗
- 利用contenttypes來追蹤models(好比實現用戶活動流)
- 利用signals來反規範化計數
- 利用Redis實現各類功能(緩存、計數、排行榜等)
- 利用sessions在服務端存儲數據(好比購物車)
- 利用celery實現異步任務(好比郵件發送)
- 定製admin
- 數據模型的繼承(abstract、multi-table、proxy)
- 自定義數據模型字段
- 用Mixin爲類視圖添加額外功能
- 用formset處理多張表單
- 緩存的使用
- 用drf建立RESTful API
- 自定義中間件
- 部署上線
若是對以上內容都瞭然於胸的話,能夠說是掌握django了。
固然,以上的全部內容用flask也均可以實現,只是方式不一樣罷了:)
經常使用第三方庫
- django-debug-toolbar:提供DEBUG信息,必備
- django-crispy-forms:美化表單
- django-extensions:各類擴展(shell、server等)
- django-taggit:提供簡單的打標籤功能
- django-braces:爲類視圖提供一系列Mixin
- django-embed-video:爲頁面嵌入視頻
- djangorestframework:大名鼎鼎的drf,爲django提供RESTful API支持
- django-xadmin:一個更強大的admin後臺
- django-ckeditor:爲表單提供富文本編輯器
- markdown:提供Markdown渲染支持
- pillow:圖像處理
- sorl-thumbnail:縮略圖生成
- redis:redis數據庫的接口
- celery:分佈式任務隊列,用來任務調度
- flower:監控celery
- weasyprint:用HTML生成PDF文件