跳轉至

建立 2026-09-17 更新 2026-09-17

Views

View 是實際處理請求、決定回傳內容的程式碼。Django 的 View 有兩種寫法:Function-Based Views(FBV),也就是這一頁介紹的一般函式;以及 Class-Based Views(CBV),把邏輯包裝成類別,內建許多常見樣板可以繼承,詳見 Class-Based Views。兩種寫法功能上等價,FBV 直覺、彈性高,CBV 則能減少重複程式碼,實務上經常混用。

官方文件:Writing views

Function-Based View 範例

View 本質上是一個接收 request 物件、回傳 HttpResponse(或其子類別)的 Python 函式:

# views.py
from django.http import HttpResponse
import datetime


def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

對應的 urls.py 把網址交給這個函式處理:

# urls.py
from django.urls import path

from . import views

urlpatterns = [
    path("current_datetime/", views.current_datetime),
]

常見回傳方式

實務上很少像上面手拼 HTML 字串,常見的三種回傳方式:

  • render(request, "template.html", context):套用 Template 並回傳 HTML,最常用。
  • redirect("some-view-name"):回傳 302 導向,常用於表單送出成功後。
  • HttpResponse(...) / JsonResponse(...):直接回傳文字或 JSON,適合 API 或簡單回應。
from django.shortcuts import render, redirect


def home(request):
    posts = Post.objects.all()
    return render(request, "myapp/home.html", {"posts": posts})

請求物件 request

request 是 View 的第一個參數,帶著這次請求的所有資訊,最常用到:

屬性 說明
request.method HTTP 方法,例如 "GET""POST"
request.GET 查詢字串參數(?key=value
request.POST 表單送出的資料
request.user 目前登入的使用者(需搭配驗證中介層)

下一步

View 拿到資料之後,通常要交給 Templates 轉成 HTML 畫面;若需要接收使用者輸入,請見 表單與驗證