repo: github.com/alphardex/p…
最近把《django by example》的專案差不多都擼完了,是時候該寫個小結了。
個人體會:django的api可以說是很多很全,這輩子都不可能全記住的。
其實,懂得速查文件就沒有什麼大問題。
大量的封裝雖然犧牲了一定的靈活性,但大大提高了開發效率,或許這就是django的哲學吧。
準備
首先,你可以用django-admin來生成你的專案。
不過筆者更建議用一個腳手架來快速生成一個啟動模板。
核心工作流
Django的核心是MVC,更準確來說是MVT(Model-View-Template)
首先建立app,並在settings中的INSTALLED_APPS新增其配置,在全域性urls中通過include引入app的所有url
接下來才是最關鍵的3步:
- 在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檔案