一、FastAPI 基础概念

  • 异步特性(async/await)对我的意义:

    await 是“非阻塞的等待”,而普通函数调用是“阻塞的等待”。

    async 用于定义一个协程函数,调用时不会立即执行,而是返回一个协程对象。两者配合实现非阻塞等待。


  • 如何启动服务(uvicorn main:app --reload):

    学习了FastAPI服务器的基本配置与调用,使用


  • 自动生成的交互文档路径:

    自动生成的交互文档路径:/docs 和 /redoc,默认在 http://127.0.0.1:8000/docs 可访问,用于在线测试和查看接口定义。这让测试变得方便快捷


二、路由与参数

  • 路径参数/user/{id}
    • 作用:让同一个接口能根据不同的输入,返回不同的输出,实现动态交互
    • 类型注解与 Path 校验:description注解,gt/ge,lt/le,max_length/min_length
  • 查询参数?skip=0&limit=10
    • 作用:用来怎么选,比如排序,分类
    • Query 函数用法:用法与Path 相似
  • 请求体POST 请求携带的数据)
    • 与路径/查询参数的区别:其是为服务器提供数据的

三、数据校验(Pydantic)

  • BaseModel 的作用:他能帮助我们自动校验、类型转换和序列化

  • 具体写法如下:

    class ChatRequest(BaseModel):
    
    message: str = Field(..., description="用户输入的消息", min_length=1)
  • Field 常用参数:

    • ...(必填) / 默认值
    • min_length / max_length
    • gt / lt(数值)
  • 请求体自动校验失败时返回的状态码:自动返回 422 Unprocessable Entity 状态码

四、响应处理

  • 直接返回 dict / Pydantic 模型

    FastAPI 会自动将返回的字典或 Pydantic 模型对象转换为 JSON 格式,并设置正确的 Content-Type: application/json

  • response_model 的作用:限制和格式化服务器返回给客户端的数据

    例如:*@app.post("/chat", response_model=ChatResponse)*

  • response_class 与 response_model 的区别:

    model改变了响应的数据结构,而class改变响应的媒体格式,且二者可以同时使用


  • 返回文件(FileResponse)场景:后续拓展

五、与外部 API 交互(以 DeepSeek 为例)

  • 为什么要用环境变量存储 API Key:

    安全且高效


  • OpenAI 客户端初始化(base_url 作用):

    告诉客户端将请求发送到哪个服务器地址


  • 构造 messages 列表的格式:

     messages = [{"role": "user", "content": request.message}]

    这是 OpenAI API 标准的对话消息格式,role 可以是 userassistantsystem。DeepSeek 完全兼容此格式。

  • 调用 client.chat.completions.create 的核心参数:

    • model
    • temperature
    • max_tokens
    • 本周并未进行模型具体调优学习,下周进行深入学习
  • 异常处理(try...except + HTTPException):

    捕获异常,并通过

    raise HTTPException(status_code=500, detail=str(e))

    返回异常


六、前后端交互与 CORS

  • 前端 fetch 基本用法(本周仅实践,未深入原理

    • 方法(method):POST
    • 请求头(headers):'Content-Type': 'application/json'
    • 请求体(body 与 JSON.stringify):将 { message } 转为 JSON 字符串
    • 处理响应(res.okres.json()):检查状态码,解析 JSON

    详细机制将在后续前端课程中学习。

  • 错误处理(网络错误、HTTP 错误状态)

    已实现简单的错误提示,但未系统学习。后续会补充。

  • CORS 跨域问题

    为了解决浏览器“file://”协议或不同端口导致的跨域限制,在后端添加了 CORSMiddleware,允许所有源。具体原理和配置细节待深入学习。

七、常见问题与解决(踩坑记录)

问题现象 原因 解决方法
端口被占用 上一个 uvicorn 进程未完全退出,或后台有残留进程

netstat -ano | findstr :8000找到 PID,

再通过taskkill /PID <PID> /F强制结束;或重启电脑

环境变量未生效 每次打开新终端需重新设置;或在 IDE 中运行时未继承系统环境变量 在终端中执行 $env:DEEPSEEK_API_KEY="sk-xxx"(PowerShell);或将 Key 写在 .env 文件中用 python-dotenv 加载
控制台中文乱码 PowerShell 默认输出编码为 GBK,而 API 返回 UTF-8 返回 UTF-8执行 [Console]::OutputEncoding = [System.Text.Encoding]::UTF8或用 Invoke-RestMethod 时直接赋值给变量再查看
curl 命令报错 PowerShell 中 curl 是 Invoke-WebRequest 别名,参数不同;且 JSON 转义困难 使用 curl.exe 代替 curl;或使用 Invoke-RestMethod 原生命令;或将 JSON 写在一行并用双引号转义
前端跨域报错 浏览器同源策略,前端与后端端口/协议不同 在后端添加 CORSMiddleware,设置 allow_origins=["*"](开发环境)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐