總結Django一些開發經驗

農夫發表於2019-02-16

最喜歡的還是 Django 的 ORM 框架。公司的專案都是前後分離的,使用 Django 做後端介面開發還是很高效的。

特此總結一些 Django 開發的小經驗。先說一些最最基礎的吧。

使用 virtualenv 隔離開發環境

使用 pip 管理專案依賴,主要就是一個小技巧,使用 pip freeze > requirements.txt 來儲存依賴的模組和版本

使用 gitignore.io 這個網站提供的 .gitignore 檔案管理程式碼庫檔案

打包和釋出

專案的打包和釋出用的 Docker,Django 專案的 Dockerfile 特別簡單:

FROM python:3.5
COPY ./requirements.txt /src
WORKDIR /src
RUN pip install -r requirements.txt
COPY . /src
EXPOSE
CMD uwsgi --http :--wsgi-file<path/to/wsgi.py>

這一個 Dockerfile 模板可以通吃 80% 的 Django 專案了。

日誌配置

既然用 Docker,就放棄了把日誌寫入檔案,直接寫到標準輸出。

# settings.py 
# ...
LOGGING = {
    `version`: 1,
    `disable_existing_loggers`: False,
    `formatters`: {
        `verbose`: {
            `format`: `[application] %(levelname)s %(asctime)s %(module)s %(message)s`
        }
    },
    `handlers`: {
        `console`: {
            `level`: `DEBUG`,
            `class`: `logging.StreamHandler`,
            `stream`: sys.stdout,
            `formatter`: `verbose`
        },
    },
    `loggers`: {
        `app`: {
            `handlers`: [`console`],
            `level`: `DEBUG`,
            `propagate`: True,
        },
    },
}

自動化測試

既然是純後端專案,工程師完全可以通過自動化測試來檢測自己的程式碼。Django 本身對測試提供了很好的支援,可以通過 sqlite 來搭建測試資料庫,還有基於記憶體的快取,做測試不會增加對其他系統的依賴。開發起來事半功倍。

除了要寫自動化測試程式碼,還要能統計測試覆蓋率。目前我們用的是 coverage.py 這個工具,說實話沒有 node.js 的 istanbul 好用,輸出的報告沒有 Istanbul 詳細和易讀。不過用來檢查 “死程式碼” 還是夠用的。

針對 http 程式碼的測試

有些專案需要對接的第三方系統比較多,比如微信認證、支付、簡訊等常見的,可能還有其他一些垂直業務領域的系統。這部分介面對接的程式碼,也應該納入到測試當中,畢竟 Python 作為指令碼語言,程式碼很容易出現錯誤。

這塊一般是用 responses 這個模組來 mock http 請求。

定時任務

有一些 Django 專案需要做一些定時任務。首先,絕對不用 linux 內建的 crontab。主要的問題還是維護的成本高,沒準哪天就把這個配置給忘了。

我們現在方式都是藉助 Django Command 的功能,將定時任務封裝成一個 command。在這個 command 裡面執行一個 scheduler。就像下面這樣:

import schedule
from django.core.management.base import BaseCommand
class Command(BaseCommand):
    def handle(self, *args, **kwargs):
        schedule.every(45).minutes.do(do_this)
        schedule.every().day.at(`04:00`).do(do_that)
        while True:
            schedule.run_pending()
            time.sleep(1)

Python學習交流q.u.n【 784758214 】內有安裝包和學習視訊資料,零基礎,進階,實戰免費的線上直播免費課程,希望可以幫助你快速瞭解Python

相關文章