Python 现代开发学习笔记

(一)从浏览器保存一本书

1. 启动已有数据的书架

进入配套 web_project,用 Python 3.12 建立环境。SQLite、HTTP 服务入口与数据解析使用标准库;Werkzeug 提供密码摘要工具,HTTPX 运行请求演示,Uvicorn 在后半章接收 ASGI 应用。

# 项目文件:web_project/pyproject.toml
# Werkzeug提供密码摘要工具,HTTPX运行请求演示,Uvicorn承接ASGI小例。
[build-system]
requires = ["setuptools>=80,<83"]
build-backend = "setuptools.build_meta"

[project]
name = "reading-web-foundations"
version = "0.1.0"
requires-python = ">=3.12,<3.13"
dependencies = ["Werkzeug>=3.1,<4", "httpx>=0.28,<1", "uvicorn>=0.35,<1"]

[project.scripts]
web-books = "webbook.cli:main"

[dependency-groups]
dev = ["pytest>=9.1,<10"]

[tool.setuptools.packages.find]
where = ["src"]

[tool.setuptools.package-data]
webbook = ["templates/*.html", "static/*.css", "static/*.js"]

[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-ra --import-mode=importlib"
# 在 web_project 中建立环境,将前面采集的六本书交给alice。
uv sync --locked
uv run web-books init --db data/library.sqlite3 --csv data/books.csv
# 打开终端提示的地址,浏览器访问 http://127.0.0.1:8767。
uv run web-books serve --db data/library.sqlite3

pip 路线使用 Python 3.12 的 .venv,执行 python -m pip install -e . -r requirements-dev.txt 后,以 python -m webbook init、python -m webbook serve 启动相同流程。

打开页面后,用演示账号 alice / learn-alice 登录,看到第九章采集的六本书。输入“Python Web 实践”,标签填“Python,网络”,保持未读并保存。再次刷新,记录仍在;点击“标记已读”,它的状态会改变。

实际运行的阅读书架,以当前账号显示六本采集记录,表单和JSON按钮访问同一份数据

2. 先固定任务中的数据与动作

自拟任务:多人阅读书架。 每个账号保存自己的书籍,书名为 1–100 个字符,同账号不重复保存同名书;标签至多 10 项,每项为 1–30 个字符。页面表单与 JSON API 共用这些规则,书籍请求体最多 16384 字节。

动作 浏览器或客户端发送 服务器完成后交回
查看书架 GET / 当前账号的 HTML 页面
保存表单 POST /books 保存后跳转回书架
读取数据 GET /api/books JSON 列表
新增 JSON POST /api/books 新记录及其查询地址
标记已读 POST /api/books/编号/finish 更新后的记录

alice 的书不会出现在 bob 的列表中,修改操作也会在服务器核对记录归属。下面逐步构建这些行为。

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