跳轉到

第一個 View

開始之前

任務目標

在這個章節中,我們會完成:

  • 了解 View 和 URL 的概念
  • 建立第一個 View 函式
  • 設定 URL 路由
  • 在瀏覽器中查看結果

什麼是 View?

View 是 Django 中處理請求並返回回應的函式或類別。當使用者訪問某個 URL 時,Django 會呼叫對應的 view 來處理請求。

什麼是 URL?

URL 設定定義了網址與 view 之間的對應關係。Django 使用 URL 設定來決定哪個 view 應該處理特定的請求。

URL 的結構

以這個網址為例:

http://127.0.0.1:8000/hello/world/?name=django#section

部分 範例 說明
協定 http:// 通訊協定(http 或 https)
主機:埠號 127.0.0.1:8000 伺服器位址或域名和埠號
路徑 /hello/world/ Django URL 處理的部分
查詢參數 ?name=django 傳遞給 view 的參數(透過 request.GET 取得)
片段 #section 瀏覽器端使用,不會傳到伺服器

Django 處理的部分

Django 的 URL 只處理路徑部分。

你可以定義類似這樣的語法 path('hello/', views.hello_world),這樣當使用者使用網址 http://127.0.0.1:8000/hello/ 時 Django 就會執行 view.hello_world

建立 Hello World View

步驟 1:建立 View 函式

編輯 practices/views.py 檔案:

practices/views.py
from django.http import HttpResponse


def hello_world(request):
    return HttpResponse("Hello, World!")

這個 view 函式:

  • 接收一個 request 參數含有使用者的請求相關資訊(Django 呼叫時會自動傳入)
  • 返回一個 HttpResponse 物件包含要回應給呼叫者的資訊以及要顯示的內容

步驟 2:設定 URL

直接在專案的 core/urls.py 中設定 URL:

core/urls.py
from django.contrib import admin
from django.urls import path

from practices.views import hello_world

urlpatterns = [
    path("admin/", admin.site.urls),
    path("hello/", hello_world, name="hello_world"),  # (1)!
]
  1. name 是幫這個路徑取一個名字方便我們後面使用,後面講到應用時再詳細解釋

步驟 3:測試

啟動開發伺服器:

uv run manage.py runserver

在瀏覽器中訪問 http://127.0.0.1:8000/hello/,你應該會看到 "Hello, World!"。

成功!

如果看到 "Hello, World!" 的文字,恭喜你建立了第一個 View!

重構:將 URL 移到 App 中

目前我們把 URL 設定放在專案的 core/urls.py 中,這樣可以快速看到結果。但當專案變大時,把所有 URL 放在一起會變得難以維護。

更好的做法是將 URL 設定放在各自的 App 中

步驟 1:在 App 中建立 urls.py

practices 目錄中建立 urls.py

practices/urls.py
from django.urls import path

from practices import views

urlpatterns = [
    path("hello/", views.hello_world, name="hello_world"),
]

步驟 2:修改專案的 urls.py

修改 core/urls.py,使用 include() 引入 App 的 URL:

core/urls.py
from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path("admin/", admin.site.urls),
    path("practices/", include("practices.urls")),  # (1)!
]
  1. 這邊我們在 path() 中加入 practices/ 的前綴,目的是為了避免衝突

上面這個範例的意思是如果今天使用者訪問了 practices/ 開頭的路徑,就會到 practices/urls.py 中繼續尋找是否有匹配的路徑

步驟 3:測試

重新整理瀏覽器,確認 http://127.0.0.1:8000/practices/hello/ 仍然可以正常顯示。

為什麼要這樣做?

將 URL 設定放在各自的 App 中有幾個好處:

  1. 模組化 - 每個 App 管理自己的 URL
  2. 可重用 - App 可以輕鬆移植到其他專案
  3. 易維護 - 專案變大時更容易管理
  4. 職責清晰 - 一眼就能看出這個 URL 屬於哪個 App

重點整理

概念 說明
View 處理請求並返回回應的函式
URL Pattern 定義網址與 view 的對應關係
HttpResponse Django 用來返回 HTTP 回應的類別
path() 定義 URL 路由的函式

任務結束

完成!

恭喜你完成了這個章節!現在你已經:

  • 了解 View 和 URL 的概念
  • 建立第一個 View 函式
  • 設定 URL 路由
  • 在瀏覽器中查看結果