Python 现代开发学习笔记

(二)最小请求、视图与响应

先不连接数据库,只让一个函数回应浏览器。

# 项目文件: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 代理,也没有按函数注解自动读取输入;框架把请求对象传进视图,视图选择怎样解析和返回。

请求按 URL 表找到视图,路径编号转为整数,请求对象提供查询串,视图分别形成 HTML 与 JSON 响应

笔记正文与全部题解 · Ctrl / ⌘ K