django開發小結

alphardex發表於2019-04-27

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步:

  1. 在models.py中定義好資料模型並遷移它們
  2. 在views.py中編寫檢視函式,並在urls.py中為其建立相應的對映
  3. 在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檔案

相關文章