Web 初识
Web:全球广域网,也称为万维网(www,World Wide Web),能够通过浏览器访问到的网站。
一个 Web 网站由三个核心部分组成:
| 部分 | 作用 | 用什么做 |
|---|---|---|
| 前端程序 | 界面展示 | HTML(结构)+ CSS(表现)+ JavaScript(行为) |
| 服务端程序 | 业务逻辑处理 | Python 里可用 Django / Flask / FastAPI |
| 数据库 | 数据存储和管理 | MySQL 等(本章案例用 JSON 文件代替) |
NOTE
前端三件套的分工在第 4 章(爬虫)里已经见过:HTML 管结构、CSS 管样式、JS 管交互。这里要写的是服务端。
FastAPI 是什么
FastAPI 是一个现代、快速、高性能的 Web 框架,用于基于标准的 Python 类型提示构建 API 接口服务。
API 接口:应用程序编程接口(Application Programming Interface),就是对外提供的功能入口,供别人来调用(比如天气查询的 API 接口)。一次调用的过程就是:客户端发 HTTP 请求 → 服务端返回 HTTP 响应。
四步写出第一个接口
from fastapi import FastAPI # 1. 导入 FastAPI
app = FastAPI() # 2. 创建 FastAPI 实例
@app.get("/") # 3. 创建路径操作函数,定义访问路径
def root():
return {"message": "Hello World"}
@app.get("/users")
def get_users():
return [
{"id": 1, "name": "张三"},
{"id": 2, "name": "李四"},
{"id": 3, "name": "王五"},
]
if __name__ == "__main__": # 4. 运行 FastAPI 服务
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)| 步骤 | 代码 |
|---|---|
| 1. 导入 | from fastapi import FastAPI |
| 2. 创建实例 | app = FastAPI() |
| 3. 定义接口 | @app.get("/路径") + 函数(函数返回值就是接口返回的数据) |
| 4. 运行服务 | 命令行 fastapi dev "xxxx.py" 或 uvicorn xxxx:app --reload;也可以写在代码里 uvicorn.run(...) |
两种启动方式
# 方式一:FastAPI 官方 CLI
fastapi dev "main.py"
# 方式二:直接用 uvicorn(xxxx:app 表示"文件:FastAPI实例名")
uvicorn main:app --reload| 名词 | 说明 |
|---|---|
| uvicorn | 专门为现代 Python Web 框架(FastAPI、Starlette)设计的高性能服务器 |
main:app | 文件 main.py 里的 app 对象 |
--reload | 改代码后自动重启(开发时用) |
TIP
启动后浏览器打开 http://127.0.0.1:8000 就能看到接口返回的 JSON;FastAPI 还自带交互式接口文档,打开 /docs 就能直接在网页上试接口——这也是它比 Django/Flask 更适合做 API 的地方。
相关
练习题
一、知识回顾(读完直接做下面的实践题)
- Web 全称万维网(World Wide Web),是能通过浏览器访问到的网站
- 网站三部分:前端程序负责界面展示、服务端程序负责业务逻辑、数据库负责数据存储管理
- 前端网页由 HTML(结构)、CSS(样式)、JavaScript(行为)组成
- Python 中开发服务端可以用 Django、Flask 或 FastAPI
- FastAPI 是现代、快速、高性能的 Web 框架,基于 Python 的类型提示构建 API
- API 接口就是对外提供的功能入口,供别人调用
- FastAPI 四步:导入 → 创建 FastAPI 实例 → 创建路径操作函数 → 运行服务
- 两个启动命令:
fastapi dev "main.py"或uvicorn main:app --reload - uvicorn 是专门为 FastAPI/Starlette 设计的高性能服务器
二、裸写题
- 提示(先自己想,实在想不出再点开)
一级 · 思路:创建实例 → 用装饰器把函数"挂"到路径上 二级 · 方法:
app = FastAPI()/@app.get("/")三级 · 骨架:函数返回字典或列表,FastAPI 会自动转成 JSON- 参考答案(做完再点开)
python# 2-1 from fastapi import FastAPI app = FastAPI(title="入门练习") USERS = [ {"id": 1, "name": "张三"}, {"id": 2, "name": "李四"}, {"id": 3, "name": "王五"}, ] @app.get("/") def root(): return {"message": "Hello World"} @app.get("/users") def get_users(): return USERS- 提示(先自己想,实在想不出再点开)
一级 · 思路:路径里的花括号就是"路径参数",要写进函数形参 二级 · 方法:
@app.get("/users/{user_id}")+def get_user(user_id: int):三级 · 骨架:user_id: int会让 FastAPI 自动把字符串转成整数- 参考答案(做完再点开)
python# 2-2 @app.get("/users/{user_id}") def get_user(user_id: int): for user in USERS: if user["id"] == user_id: return user return {"message": "用户不存在"}- 提示(先自己想,实在想不出再点开)
一级 · 思路:像写单元测试一样调接口,不用真的开服务器 二级 · 方法:
from fastapi.testclient import TestClient/client = TestClient(app)三级 · 骨架:print(response.status_code, response.json())- 参考答案(做完再点开)
python# 2-3:不启动服务器也能测 from fastapi.testclient import TestClient if __name__ == "__main__": client = TestClient(app) for path in ["/", "/users", "/users/2", "/users/99"]: resp = client.get(path) print(path, resp.status_code, resp.json()) # 真正启动服务时用: # fastapi dev main.py 或 uvicorn main:app --reload
