Django走過的一些彎路-專案結構

LiYao 發表於 2021-05-19
Django

我學習Python的路線可能和大部分人不一樣,當時領導安排任務想做一個運維平臺之類的平臺,那個時候我還是隻會寫shell的小菜鳥。調查了一週,總結發現Python容易上手,Django框架較為全面,於是直接看Django文件。所以一般是:構思想實現的功能 -> google功能在django中如何實現 -> 自己嘗試編寫 -> 遇到問題繼續google,重複這個過程直到想實現的功能完成。這種學習方法能快速達到工作目標,是一種自上而下的學習方法,區別於自下而上的學習方式就是基礎知識不夠紮實,到現在基本都摸透了,總結一下走的彎路。

Demo專案

專案結構

首先的首先,我認為一個專案的結構是最重要的。就好比人類的骨骼,清晰明確的專案結構有利於模組分離,複用,且對於自己或者看你程式碼的人都是一種享受。

最早的時候,我的專案都是在根專案中,寫的程式碼都是在根專案的views.py中,很快這個檔案就超過2k行,每次開啟需要等一會。就連Pycharm某些外掛都罷工了(大於1000行的檔案出於執行效率問題會忽略)😹。

通過自己一段時間的摸索和檢視開源專案等總結,以下結構對我來說比較適合。

  • 專案結構

      ├── README.md                   # 說明檔案
      ├── apps                        # 子專案目錄
      │   ├── README.md                   - # 專案規範說明檔案
      │   ├── app1                        - # 自定義模組一
      │   ├── app2                        - # 自定義模組二
      │   ├── ...                         - # 更多自定義模組,每個模組一個資料夾
      │   └── user                        - # 使用者模組(單獨抽離出)
      ├── main                        # 專案主目錄
      │   ├── __init__.py
      │   ├── asgi.py
      │   ├── settings.py             # 主配置檔案
      │   ├── urls.py                 # 請求URL主入口
      │   └── wsgi.py
      ├── db.sqlite3                  # 自帶資料庫(僅開發環境)
      ├── env                         # 不同環境的配置檔案
      │   ├── README.md                   - # 環境配置說明
      │   ├── env.example                 - # 配置示例檔案
      │   └── env                         - # 環境配置檔案
      ├── logs                        # 日誌
      │   ├── access.log                 - # 訪問日誌
      │   ├── error.log                  - # 錯誤日誌
      │   └── uwsgi.log                  - # 執行日誌
      ├── manage.py
      ├── reload                      # (uwsgi) 監聽該檔案變動重啟服務
      ├── requirements.txt            # 專案依賴
      ├── static                      # 靜態資原始檔
      │   ├── css
      │   ├── image
      │   └── js
      └── uwsgi.ini                   # uwsgi配置檔案

    以下幾個目錄比較關鍵

    • apps 關於實現的所有業務邏輯,每個模組單獨起一個app寫,相關邏輯放到對應app
    • main 根專案,框架啟動入口。不實現任何業務邏輯。固定名稱,就叫main。
    • env 專案配置目錄,包含一個專案配置例項。通常會以檔案的方式通過容器掛載。
  • app結構(偷懶就截個圖)

    Django走過的一些彎路

    • views.py,urls.py不要寫到單個檔案中,否則一旦介面數量變多就比較難維護,拆開放置到不同檔案中。(之前很長一段時間只能靠Ctrl + F搜尋…)
    • filter方法, serializer方法不要和models寫到一起,放到單獨的檔案中。
    • 抽離出App可以複用的功能,封裝成工具類。我是放到了utils中,網上也有說建立一個common.py的是一樣的道理。

舉例當我想找[使用者管理] -> [後臺系統] 的api時,我可以很快速的定位到apps -> user -> urls -> http -> system,再也不用去一個大的views.py中使用搜尋啦

總結:相同功能的模組配置,功能,抽離出來放到單獨的檔案。

放一個總的圖片

Django走過的一些彎路-專案結構

本作品採用《CC 協議》,轉載必須註明作者和本文連結