撰寫您的第一個 Django 應用程式,第一部分¶
讓我們從範例中學習。
在本教學中,我們將引導您建立一個基本的投票應用程式。
它將包含兩個部分
一個公開網站,讓使用者可以查看投票並參與投票。
一個管理網站,讓您可以新增、變更和刪除投票。
我們假設您已經安裝了 Django。您可以透過在 Shell 提示符號(以 $ 字首表示)中執行以下命令來判斷是否已安裝 Django 以及版本。
$ python -m django --version
...\> py -m django --version
如果已安裝 Django,您應該會看到安裝的版本。如果沒有安裝,您會收到一個錯誤訊息,指出「No module named django」。
本教學是為 Django 5.1 編寫的,該版本支援 Python 3.10 及更高版本。如果 Django 版本不符,您可以使用本頁右下角的版本切換器,參考適用於您 Django 版本的教學,或將 Django 更新到最新版本。如果您使用的是較舊版本的 Python,請查看我可以使用哪個 Python 版本搭配 Django?以尋找相容版本的 Django。
請參閱如何安裝 Django,以取得如何移除較舊版本的 Django 並安裝較新版本的建議。
哪裡可以取得協助
如果您在進行本教學時遇到困難,請前往常見問題解答的取得協助章節。
建立專案¶
如果您是第一次使用 Django,則必須進行一些初始設定。也就是說,您需要自動產生一些程式碼,這些程式碼會建立 Django 專案 – 一個 Django 實例的設定集合,包括資料庫配置、Django 特定選項和應用程式特定設定。
從命令列中,使用 cd
進入您要儲存程式碼的目錄,並建立一個名為 djangotutorial
的新目錄。(此目錄名稱對 Django 而言並不重要;您可以將其重新命名為任何您喜歡的名稱。)
$ mkdir djangotutorial
...\> mkdir djangotutorial
然後,執行以下命令以啟動一個新的 Django 專案
$ django-admin startproject mysite djangotutorial
...\> django-admin startproject mysite djangotutorial
這將在 djangotutorial
目錄內建立一個名為 mysite
的專案。如果它不起作用,請參閱執行 django-admin 時發生問題。
注意
您需要避免以內建的 Python 或 Django 元件來命名專案。特別是,這表示您應避免使用類似 django
(這會與 Django 本身衝突)或 test
(這與內建的 Python 套件衝突)的名稱。
讓我們看看 startproject
建立的內容
djangotutorial/
manage.py
mysite/
__init__.py
settings.py
urls.py
asgi.py
wsgi.py
這些檔案為
manage.py
:一個命令列工具,可讓您以各種方式與此 Django 專案互動。您可以在django-admin 和 manage.py中閱讀所有關於manage.py
的詳細資訊。mysite/
:一個目錄,它是您專案的實際 Python 套件。其名稱是您需要用來匯入其中任何內容的 Python 套件名稱(例如,mysite.urls
)。mysite/__init__.py
:一個空檔案,告訴 Python 該目錄應被視為 Python 套件。如果您是 Python 初學者,請在官方 Python 文件中閱讀更多關於套件的資訊。mysite/settings.py
:此 Django 專案的設定/配置。Django 設定將告訴您所有關於設定如何運作的資訊。mysite/urls.py
:此 Django 專案的 URL 宣告;您 Django 驅動網站的「目錄」。您可以在URL 分配器中閱讀更多關於 URL 的資訊。mysite/asgi.py
:ASGI 相容 Web 伺服器為您的專案提供服務的進入點。有關更多詳細資訊,請參閱如何使用 ASGI 部署。mysite/wsgi.py
:WSGI 相容 Web 伺服器為您的專案提供服務的進入點。有關更多詳細資訊,請參閱如何使用 WSGI 部署。
開發伺服器¶
讓我們驗證您的 Django 專案是否運作。如果您尚未進入,請變更到 djangotutorial
目錄,並執行以下命令
$ python manage.py runserver
...\> py manage.py runserver
您會在命令列上看到以下輸出
Performing system checks... System check identified no issues (0 silenced). You have unapplied migrations; your app may not work properly until they are applied. Run 'python manage.py migrate' to apply them. November 14, 2024 - 15:50:53 Django version 5.1, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CONTROL-C.
注意
現在忽略有關未應用資料庫移轉的警告;我們稍後會處理資料庫。
現在伺服器正在執行,請使用您的 Web 瀏覽器瀏覽 http://127.0.0.1:8000/。您會看到一個「恭喜!」頁面,其中有一個火箭正在升空。它運作了!
您已啟動 Django 開發伺服器,這是一個完全以 Python 編寫的輕量型 Web 伺服器。我們在 Django 中加入了這個伺服器,因此您可以快速開發內容,而無需處理配置生產伺服器(例如 Apache)的問題,直到您準備好進行生產。
現在是注意以下事項的好時機:請勿在任何類似生產環境的情況下使用此伺服器。它僅用於開發時使用。(我們是從事建立 Web 框架的業務,而不是 Web 伺服器。)
(若要在不同的連接埠上提供網站服務,請參閱runserver
參考。)
runserver
自動重新載入
開發伺服器會在每個請求時自動重新載入 Python 程式碼。您不需要重新啟動伺服器即可使程式碼變更生效。但是,某些動作(例如新增檔案)不會觸發重新啟動,因此在這些情況下您必須重新啟動伺服器。
建立投票應用程式¶
現在您的環境(「專案」)已設定完成,您已準備好開始工作。
您在 Django 中撰寫的每個應用程式都包含一個遵循特定慣例的 Python 套件。Django 隨附一個工具,可自動產生應用程式的基本目錄結構,因此您可以專注於撰寫程式碼,而不是建立目錄。
專案 vs. 應用程式
專案和應用程式有什麼區別?應用程式是一個執行某些動作的 Web 應用程式,例如部落格系統、公共紀錄資料庫或小型投票應用程式。專案是特定網站的配置和應用程式集合。一個專案可以包含多個應用程式。一個應用程式可以存在於多個專案中。
您的應用程式可以存在於您Python 路徑中的任何位置。在本教學中,我們將在 djangotutorial
資料夾內建立投票應用程式。
若要建立您的應用程式,請確定您位於與 manage.py
相同的目錄中,並輸入此命令
$ python manage.py startapp polls
...\> py manage.py startapp polls
這將建立一個目錄 polls
,其版面配置如下
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py
此目錄結構將放置投票應用程式。
撰寫您的第一個檢視¶
讓我們撰寫第一個檢視。開啟檔案 polls/views.py
並在其中放入以下 Python 程式碼
polls/views.py
¶from django.http import HttpResponse
def index(request):
return HttpResponse("Hello, world. You're at the polls index.")
這是 Django 中最基本的檢視。若要在瀏覽器中存取它,我們需要將其對應到 URL,而為此,我們需要定義一個 URL 配置,簡稱「URLconf」。這些 URL 配置定義在每個 Django 應用程式中,它們是名為 urls.py
的 Python 檔案。
若要為 polls
應用程式定義 URLconf,請使用以下內容建立檔案 polls/urls.py
polls/urls.py
¶from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index"),
]
您的應用程式目錄現在應如下所示
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
urls.py
views.py
下一步是配置 mysite
專案中的全域 URLconf,以包含 polls.urls
中定義的 URLconf。若要執行此操作,請在 mysite/urls.py
中新增 django.urls.include
的匯入,並在 urlpatterns
清單中插入一個 include()
,這樣您就有
mysite/urls.py
¶from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("polls/", include("polls.urls")),
path("admin/", admin.site.urls),
]
path()
函數至少需要兩個引數:route
和 view
。include()
函數允許參考其他 URLconf。每當 Django 遇到 include()
時,它會切斷 URL 中與該點匹配的所有部分,並將剩餘字串傳送到包含的 URLconf 以進行進一步處理。
include()
背後的概念是讓 URL 的隨插即用變得容易。由於 polls 應用程式有自己的 URL 設定檔(polls/urls.py
),它們可以被放置在 “/polls/”,或者 “/fun_polls/”,或者 “/content/polls/”,或者任何其他路徑根目錄下,這個應用程式仍然能夠正常運作。
何時使用 include()
當您包含其他 URL 模式時,您應該總是使用 include()
。唯一的例外是 admin.site.urls
,它是 Django 為預設管理網站提供的預建 URL 設定檔。
您現在已將 index
視圖連接到 URL 設定檔。請使用以下命令驗證它是否正常運作
$ python manage.py runserver
...\> py manage.py runserver
在您的瀏覽器中前往 https://127.0.0.1:8000/polls/,您應該會看到文字 “Hello, world. You’re at the polls index.”,這是您在 index
視圖中定義的。
找不到網頁?
如果您在這裡看到錯誤頁面,請檢查您前往的是 https://127.0.0.1:8000/polls/ 而不是 https://127.0.0.1:8000/。
當您熟悉基本請求和回應流程後,請閱讀本教學的第 2 部分,開始使用資料庫。