1. 程式人生 > >我2018年開始Django開發時踩過的坑

我2018年開始Django開發時踩過的坑

作者:Luan Nguyen

副標題:Django - 當你開始一個新專案時要注意的地方 - 2018年更新

譯者:首席IT民工

現在回想起來,如果在開始Django之旅的時候我注意了這幾個地方,會省去我大量的時間和精力。

延伸閱讀(Too Long To Read): 注意使用cookiecutter-Django 以便上手所提到的大部分東西。

當我開始做web開發時,我是一名普通的php程式設計師,不屑於老是看文件。經過努力,總能從搜尋引擎中找到解決方法(嗯,現在仍然如此)。

讓我很不爽的是,有時候各種東西攪和在一起,你很難讀懂別人的程式碼,甚至是幾個禮拜前自己寫的程式碼。這一點不可小覷,閱讀程式碼總是花很多時間。

Python(以及Django)的出現解救了我。第一次,我能夠輕鬆地閱讀別人的程式碼了(也不全是,哈哈)。閱讀,變得更簡單了。事實上,通過閱讀別人的程式碼,我的技能提高了很多。然而,和其他人一樣,一開始我犯了很多,尤其是Django相關的錯誤。

以下是我希望記錄下來的東西,對於開始時踩過的那些坑,我會逐一新增。

Cookie cutter Django

每次當我開始一個專案時,總會建立一個什麼都沒有的空白專案。然後,反覆地修改專案,直到出現我希望的設定/結構。

我原以為我只要為新專案建一個程式碼庫,然後繼續開發就好了,但實際上維護和更新這個程式碼庫卻佔用了大量的時間。

cookiecutter-Django

 是一個超棒的專案。有了它,你可以在開始專案時就應用很多人稱“最佳實踐”的東西。它也自帶了一些有助於加速開發的常用元件。

Virtualenv

如果你已經看過一些Python文件,你應該見過這個東西。再怎麼推薦都不為過啊。

一定要使用virtualenv來分開每個專案的開發環境。即使你開始的時候只有一個專案,不要都放在global裡面,並且你很快就有更多的專案的。

當你建立一個新的環境時,可以這樣指定Python版本:

virtualenv env -p python3

另外,確保你檢視一下 virtualenvwrapper,這篇文件能幫助你輕鬆地管理各種不同的虛擬環境:

  • 在一個地方儲存所有的虛擬環境

  • 儘快進入虛擬環境,比如,只要執行workon awesome project就好了

  • 設定好當你進出這些環境時所執行的指令碼(簡單的例子如:切換到專案所在目錄,啟動一些東西)

設定之結構

這是另一件重要的事情 -- 我是認真的。

常規的開發流程是這個樣子:你進行本地開發,然後推送到某種測試伺服器,最後上線。

每個環境都有其自身的設定和配置(比方說,本地的資料庫配置會不同於生產環境的配置)。

對於特定的東西,尤其是那些敏感資訊,可以選擇從環境變數來獲取。

其他的東西,你可以為不同的環境準備不同的設定檔案,如圖所示:

image.png

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, 檢視,表單,測試。