(二)最小请求、视图与响应
先不连接数据库,只让一个函数回应浏览器。
# 项目文件:demos/minimal.py
from html import escape
import django
from django.conf import settings
from django.http import HttpResponse, JsonResponse
from django.test import Client
from django.urls import path
settings.configure(
SECRET_KEY="temporary-demo-key",
ROOT_URLCONF=__name__,
ALLOWED_HOSTS=["testserver"],
MIDDLEWARE=[],
)
django.setup() # 读取设置并准备应用注册表,这份短例不使用数据库。
def hello(request):
return HttpResponse(f"<h1>你好,{escape(request.GET.get('name', '读者'))}</h1>")
def book(request, pk):
return JsonResponse({"id": pk, "title": "Python 入门"})
urlpatterns = [path("hello/", hello), path("books/<int:pk>/", book)]
client = Client()
print(client.get("/hello/?name=Django").text)
print(client.get("/books/3/").json())settings.configure 为这份独立短例提供配置,django.setup() 读取配置、准备应用注册表。urlpatterns 将路径交给对应视图。Django 视图显式接收 request,查询串从 request.GET 取得;HttpResponse 发送页面文本,JsonResponse 发送字典。
执行 uv run python ../demos/minimal.py,得到问候标题和编号为 3 的 JSON。这里没有使用 Flask 的 request 代理,也没有按函数注解自动读取输入;框架把请求对象传进视图,视图选择怎样解析和返回。