總結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)
總結Django一些開發經驗