Skip to content

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 接口服务。

官网:https://fastapi.org.cn

API 接口:应用程序编程接口(Application Programming Interface),就是对外提供的功能入口,供别人来调用(比如天气查询的 API 接口)。一次调用的过程就是:客户端发 HTTP 请求 → 服务端返回 HTTP 响应。

四步写出第一个接口 ​

python
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(...)

两种启动方式 ​

bash
# 方式一: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 的地方。

相关 ​

练习题 ​

一、知识回顾(读完直接做下面的实践题) ​

  1. Web 全称万维网(World Wide Web),是能通过浏览器访问到的网站
  2. 网站三部分:前端程序负责界面展示、服务端程序负责业务逻辑、数据库负责数据存储管理
  3. 前端网页由 HTML(结构)、CSS(样式)、JavaScript(行为)组成
  4. Python 中开发服务端可以用 Django、Flask 或 FastAPI
  5. FastAPI 是现代、快速、高性能的 Web 框架,基于 Python 的类型提示构建 API
  6. API 接口就是对外提供的功能入口,供别人调用
  7. FastAPI 四步:导入 → 创建 FastAPI 实例 → 创建路径操作函数 → 运行服务
  8. 两个启动命令:fastapi dev "main.py" 或 uvicorn main:app --reload
  9. 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