文中所有示例程式碼的倉庫地址:https://github.com/HelloGitHub-Team/HelloDjango-blog-tutorial
開發環境說明
本教程寫作時開發環境的系統平臺為 Windows 10 (64 位),Python 版本為 3.6.4 (64 位),django 版本為 2.2.3。
建議儘可能地與教程的開發環境保持一致(尤其是 Python 與 django 版本),避免不必要的麻煩。Python 版本必須為 Python 3.4 或以上,django 版本號必須為 django 2.2.x。
注意:
django 2.0 以上版本不再支援 Python 2。
安裝 Python
Windows 下安裝 Python 非常簡單,去 Python 官方網站找到 Python 3 的下載地址,根據你的系統選擇 32 位或者 64 位的安裝包,下載好後雙擊安裝即可。
安裝完後檢測 Python 是否可以正常執行。在命令列輸入 python -V
,如果輸出了 Python 的版本號,說明 Python 已安裝成功。
> python -V
Python 3.6.4
提示:
如果提示命令未找到,而你又確定已經安裝了 Python,多半是因為沒有把 Python 新增到環境變數。可搜尋如何把 Python 新增到環境變數的相關教程,將安裝的Python 新增到環境變數即可。
使用虛擬環境
強烈推薦在虛擬環境下進行 django 的開發。
虛擬環境是一種 Python 工具,使用它可以建立一個獨立的 Python 環境。
為什麼要使用虛擬環境呢?舉個例子,假設你已經在系統中安裝了 Python,並且在閱讀此教程前你已經進行過一些 django 的學習,但那時候安裝的 django 還是 1.x 的老版本。我們教程使用的是最新版的 django 2.2.x 版本,你可能不願意刪除掉舊版的 django 1.x,因為那可能導致你以前的專案無法執行。既想讓原來的專案在 django 1.x 環境下執行,又想再安裝 django 2.2.x 來開啟本教程的專案,怎麼辦呢?使用虛擬環境就能夠完美解決這個問題。
虛擬環境幫我們從系統的 Python 環境中克隆一個全新的 Python 環境出來,這個環境獨立於原來的 Python 環境。我們可以在這個新克隆的環境下安裝 django 2.2.x,並且在這個新環境下執行我們的新專案。
有多種方式建立和使用虛擬環境,此前我個人習慣使用 virtualenv 配合 virtualenvwrapper 兩個 Python 庫來使用和管理虛擬環境,現在我比較喜歡使用 Pipenv 代替上面兩個工具。此外 Python 3.3 以後的發行版,自帶一個 venv 供開箱即用。為了簡單起見,這裡介紹兩種方式,一種是我之前用的 virtualenv,還有一種就是我現在在用的 Pipenv。virtualenvwrapper 和 venv 的使用,可以在學完這個教程後自行探索。
鑑於 Pipenv 可以完美替代 virtualenv 和 virtualenvwrapper,而且對專案依賴的管理做的更好,所以後續教程如果用到虛擬環境,都會使用 Pipenv 進行管理。
virtualenv 建立和管理虛擬環境
virtualenv 的使用非常簡單,首先安裝 virtualenv,開啟命令列工具,輸入下面的命令即可安裝 virtualenv:
> pip install virtualenv
安裝成功後就可以開始建立虛擬環境,指定一個你喜歡的目錄,virtualenv 會把這個新的虛擬環境裝到你指定目錄下。例如我把它裝到 C:\Users\yangxg\.virtualenvs 目錄下,並將虛擬環境命名為 blogproject_virtualenv(也可以取任何你喜歡的名字)。在命令欄執行如下命令:
> virtualenv C:\Users\yangxg\.virtualenvs\blogproject_virtualenv
虛擬環境已經建立好了,我們需要啟用這個環境,進入到剛才建立的虛擬環境的根目錄,執行 Scripts 目錄下的 activate 程式啟用它:
> cd C:\Users\yangxg\.virtualenvs\blogproject_virtualenv
> .\Scripts\activate
(blogproject_virtualenv) >
注意
Linux 下沒有 Scripts 這個目錄,取而代之的是 bin/ 目錄。且啟用命令為:
$ source ./bin/activate
可以看到命令提示符前面多了 (blogproject_virtualenv),說明我們已經成功啟用了虛擬環境,接下來就可以開始安裝 django 了。
注意:
如果使用 PowerShell,微軟預設不允許執行 ps1 指令碼,如果你得到如下錯誤:
+CategoryInfo : SecurityError:(:) [],PSSecurityException +FullyQualifiedErrorId : UnauthorizedAccess
需要修改 PowerShell 的指令碼執行策略以允許 ps1 指令碼執行,命令為 Set-ExecutionPolicy RemoteSigned:
> Set-ExecutionPolicy RemoteSigned 執行策略更改 執行策略可幫助你防止執行不信任的指令碼。更改執行策略可能會產生安全風險,如 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies 幫助主題所述。是否要更改執行策略? [Y] 是(Y) [A] 全是(A) [N] 否(N) [L] 全否(L) [S] 暫停(S) [?] 幫助 (預設值為“N”): Y
即將執行策略修改為允許執行被信任的且由釋出者簽名的下載自 Internet 的指令碼。
Pipenv 建立和管理虛擬環境
首先通過命令 pip install pipenv
安裝 Pipenv。
然後建立一個資料夾,作為我們將要開發的部落格專案的根目錄,例如我在個人的工作目錄 C:\Users\yangxg\SpaceLocal\Workspace\G_Courses 下新建一個名為 HelloDjango-blog-tutorial 的目錄,作為專案根目錄。
然後進入這個目錄,在這個目錄下執行 pipenv install
,Pipenv 將會為我們做好一切工作。具體來說,Pipenv會根據專案資料夾的名稱建立一個虛擬環境,並且會在專案根目錄下生成 Pipfile 和 Pipfile.lock 用於管理專案依賴(以後使用 Pipenv 安裝的依賴會自動寫入 Pipfile 檔案,無需再手動維護 requirements.txt 檔案,類似於 node.js 的 package.json,簡直爽歪歪)。
此外,Pipenv 還非常貼心地輸出下列資訊,告訴你如何使用建立的虛擬環境:
To activate this project's virtualenv, run pipenv shell.
Alternatively, run a command inside the virtualenv with pipenv run.
即,要啟用虛擬環境,在專案根目錄下執行 pipenv shell 命令。
或者,沒有啟用虛擬環境的情況下,執行 pipenv run + 命令,也可以在虛擬環境中執行指定的命令。
考慮到 Pipenv 可以非常方便地幫我們管理虛擬環境以及專案依賴,後續我們將始終使用 Pipenv 作為虛擬環境管理工具。
提示:
你可能想知道 pipenv 建立的虛擬環境在哪裡?預設情況下,Pipenv 會將虛擬環境建立在 ~/.virtualenvs 目錄下,在專案根目錄下使用
pipenv --venv
可以檢視到專案對應的虛擬環境的具體位置:> pipenv --venv C:\Users\yangxg\.virtualenvs\HelloDjango-blog-tutorial-VDQF8f6V
安裝 Django
django 的官方文件對 如何安裝 django 給出了詳細且明確的指導,不過我們目前用不上這些,只需使用 pipenv 命令就可以解決問題。進入專案根目錄,執行:
> pipenv install django==2.2.3
我們用 django==2.2.3 來安裝指定的 django 版本以保證和教程中的一致。如果你直接 pipenv install django
的話有可能安裝最新的 django 發行版本,而不是 django 2.2.3,有可能帶來不相容性,為後續教程的順利進行帶來麻煩。
測試一下安裝是否成功,先在命令列輸入 pipenv run python
啟動虛擬環境中的 Python 直譯器互動介面)。然後輸入 import django
,如果沒有報錯就說明 django 安裝成功。通過執行 print(django.get_version())
列印出 django 的版本號,確保安裝了正確版本的 django。
> pipenv run python
(HelloDjango-blog-tutorial-VDQF8f6V) > python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD6Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> print(django.get_version())
2.2.3
建立 Django 工程
萬事已經具備了,讓我們來建立 django 專案工程。
django 工程(Project)是我們專案程式碼的容器,例如我們部落格專案中所有的程式碼(包括 django 為我們自動生成的以及我們自己寫的)都包含在這個工程裡。其實說通俗一點就是用一個資料夾把一系列 Python 程式碼檔案和 django 配置檔案包裹起來,這個資料夾就可以看做一個 django 工程。我們不必親自動手新建這個資料夾和程式碼檔案,django 的內建命令已經幫我們做了這些事情。例如我把部落格工程的程式碼放在C:\Users\yangxg\SpaceLocal\Workspace\G_Courses\HelloDjango-blog-tutorial 目錄下,工程名我把它叫做 blogproject,那麼在專案根目錄執行如下命令建立工程:
> pipenv run django-admin startproject blogproject C:\Users\yangxg\SpaceLocal\Workspace\G_Courses\HelloDjango-blog-tutorial
django-admin startproject
命令用來初始化一個 django 專案,它接收兩個引數,第一個是專案名 blogproject,第二個指定專案生成的位置,因為之前我們為了使用 Pipenv 建立了專案根目錄,所以將專案位置指定為此前建立的位置。
進入工程所在目錄 C:\Users\yangxg\SpaceLocal\Workspace\G_Courses\HelloDjango-blog-tutorial(你可能設定在其它路徑),會發現多了一個 blogproject 的目錄,整個專案的檔案結構如下:
HelloDjango-blog-tutorial\
Pipfile
Pipfile.lock
manage.py
blogproject\
__init__.py
settings.py
urls.py
wsgi.py
最頂層的 HelloDjango-blog-tutorial 目錄是我們剛剛指定的專案根目錄。HelloDjango-blog-tutorial 目錄下面有一個 manage.py 檔案,manage 是管理的意思,顧名思義 manage.py 就是 django 為我們生成的管理這個專案的 Python 指令碼檔案,以後用到時會再次介紹。與 manage.py 同級的還有一個 blogproject 的目錄,這裡面存放了一些 django 的配置檔案,例如 settings.py、urls.py 等等,以後用到時會詳細介紹。
Hello Django
網站需要執行在一個 Web 伺服器上,django 已經為我們提供了一個用於本地開發的 Web 伺服器。在命令列工具裡進入到 manage.py 所在目錄,即 HelloDjango-blog-tutorial 目錄下。執行 pipenv run python manage.py runserver
命令就可以在本機上開啟一個 Web 伺服器:
> pipenv run python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 17 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
July 05, 2019 - 21:05:37
django version 2.2.3, using settings 'blogproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
看到這樣的資訊表明我們的伺服器開啟成功。
在瀏覽器輸入 http://127.0.0.1:8000/ ,看到如下的頁面:
It worked! django 工作了!
注意:
如果在瀏覽器輸入 http://127.0.0.1:8000/ 後顯示無法訪問該網站,請檢查是不是瀏覽器代理的問題。比如開啟了某些 VPN 代理服務等,將它們全部關閉即可。
這是 manage.py 的第一個用法,執行它的 runserver
命令開啟本地開發伺服器,以後我們還會遇到更多的命令。
命令欄工具下按 Ctrl + c 可以退出開發伺服器(按一次沒用的話連續多按幾次)。重新開啟則再次執行 python manage.py runserver
。
django 預設的語言是英語,所以顯示給我們的歡迎頁面是英文的。我們在 django 的配置檔案裡稍作修改,讓它支援中文。用任何一個文字編輯器開啟 settings.py 檔案,找到如下的兩行程式碼:
HelloDjango-blog-tutorial/blogproject/settings.py
## 其它配置程式碼...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
## 其它配置程式碼...
把 LANGUAGE_CODE
的值改為 zh-hans
,TIME_ZONE
的值改為 Asia/Shanghai
:
HelloDjango-blog-tutorial/blogproject/settings.py
## 其它配置程式碼...
# 把英文改為中文
LANGUAGE_CODE = 'zh-hans'
# 把國際時區改為中國時區(東八區)
TIME_ZONE = 'Asia/Shanghai'
## 其它配置程式碼...
儲存更改後關閉 settings.py 檔案。
再次執行開發伺服器,並在瀏覽器開啟 http://127.0.0.1:8000/ ,可以看到 django 已經支援中文了。
一切準備就緒,開始進入我們的 django 部落格開發之旅吧!
歡迎關注 HelloGitHub 公眾號,獲取更多開源專案的資料和內容。