我2018年開始Django開發時踩過的坑
作者:Luan Nguyen
副標題:Django - 當你開始一個新專案時要注意的地方 - 2018年更新
譯者:首席IT民工
現在回想起來,如果在開始Django之旅的時候我注意了這幾個地方,會省去我大量的時間和精力。
延伸閱讀(Too Long To Read): 注意使用cookiecutter-Django 以便上手所提到的大部分東西。
當我開始做web開發時,我是一名普通的php程式設計師,不屑於老是看文件。經過努力,總能從搜尋引擎中找到解決方法(嗯,現在仍然如此)。
讓我很不爽的是,有時候各種東西攪和在一起,你很難讀懂別人的程式碼,甚至是幾個禮拜前自己寫的程式碼。這一點不可小覷,閱讀程式碼總是花很多時間。
Python(以及Django)的出現解救了我。第一次,我能夠輕鬆地閱讀別人的程式碼了(也不全是,哈哈)。閱讀,變得更簡單了。事實上,通過閱讀別人的程式碼,我的技能提高了很多。然而,和其他人一樣,一開始我犯了很多,尤其是Django相關的錯誤。
以下是我希望記錄下來的東西,對於開始時踩過的那些坑,我會逐一新增。
Cookie cutter Django
每次當我開始一個專案時,總會建立一個什麼都沒有的空白專案。然後,反覆地修改專案,直到出現我希望的設定/結構。
我原以為我只要為新專案建一個程式碼庫,然後繼續開發就好了,但實際上維護和更新這個程式碼庫卻佔用了大量的時間。
Virtualenv
如果你已經看過一些Python文件,你應該見過這個東西。再怎麼推薦都不為過啊。
一定要使用virtualenv來分開每個專案的開發環境。即使你開始的時候只有一個專案,不要都放在global裡面,並且你很快就有更多的專案的。
當你建立一個新的環境時,可以這樣指定Python版本:
virtualenv env -p python3
另外,確保你檢視一下 virtualenvwrapper,這篇文件能幫助你輕鬆地管理各種不同的虛擬環境:
在一個地方儲存所有的虛擬環境
儘快進入虛擬環境,比如,只要執行workon awesome project就好了
設定好當你進出這些環境時所執行的指令碼(簡單的例子如:切換到專案所在目錄,啟動一些東西)
設定之結構
這是另一件重要的事情 -- 我是認真的。
常規的開發流程是這個樣子:你進行本地開發,然後推送到某種測試伺服器,最後上線。
每個環境都有其自身的設定和配置(比方說,本地的資料庫配置會不同於生產環境的配置)。
對於特定的東西,尤其是那些敏感資訊,可以選擇從環境變數來獲取。
其他的東西,你可以為不同的環境準備不同的設定檔案,如圖所示:
base.py 包含常見的環境設定;local.py 包含屬於本地環境的設定
local.py, staging.py 和 production.py 會匯入base.py的設定。你可以藉助環境變數來決定要用哪個設定檔案。
manage.py的例子:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local')
如果你使用cookiecutter-django,這些是已經存在的!
從一開始自定義使用者模型
始終從一開始就選擇自定義使用者模型。
你可能會覺得對於簡單的專案,沒必要開始的時候需要一個自定義的使用者模型(我原來也這樣認為)
可是呢,如果專案持續一段時候後,你很有可能很快需要轉到使用者模型,以便引入額外的東西。遷移到使用者模型並不總是一件有樂趣的任務。
用於監控的Sentry
用Sentry來進行監控。真的,很簡單很容易。你能獲得些什麼?
當你的站點有問題時,會有通知郵件
管理你的問題(給事情打勾,哈哈)
問題的統計
幾個可以使用的App
Django-extensions 包含很多東西,我並非都用過。比如:
runserver_plus: 不是常規的runserver,而是用來本地執行服務的。你會接觸到很好看的除錯介面,每步都提供互動式Python Shell! (這點是最吸引我的)
show_urls: 顯示所有專案的urls,和他們指向的檢視。
django-debug-toolbar 除錯工具欄可以顯示很多東西,比如除錯訊息,比如執行了那些SQL查詢。
django_builder 你只需要引入你的模型,然後它會生成各種東西,是的,有url, 檢視,表單,測試。