2026/4/6 10:35:42
网站建设
项目流程
一、FastAPI 基础概念异步特性async/await对我的意义await是“非阻塞的等待”而普通函数调用是“阻塞的等待”。async用于定义一个协程函数调用时不会立即执行而是返回一个协程对象。两者配合实现非阻塞等待。如何启动服务uvicorn main:app --reload学习了FastAPI服务器的基本配置与调用使用自动生成的交互文档路径自动生成的交互文档路径/docs和/redoc默认在http://127.0.0.1:8000/docs可访问用于在线测试和查看接口定义。这让测试变得方便快捷二、路由与参数路径参数/user/{id}作用让同一个接口能根据不同的输入返回不同的输出实现动态交互类型注解与Path校验description注解gt/gelt/le,max_length/min_length查询参数?skip0limit10作用用来怎么选比如排序分类Query函数用法用法与Path相似请求体POST请求携带的数据与路径/查询参数的区别其是为服务器提供数据的三、数据校验PydanticBaseModel的作用他能帮助我们自动校验、类型转换和序列化具体写法如下class ChatRequest(BaseModel): message: str Field(..., description用户输入的消息, min_length1)Field常用参数...必填 / 默认值min_length/max_lengthgt/lt数值请求体自动校验失败时返回的状态码自动返回422 Unprocessable Entity状态码四、响应处理直接返回 dict / Pydantic 模型FastAPI 会自动将返回的字典或 Pydantic 模型对象转换为 JSON 格式并设置正确的Content-Type: application/jsonresponse_model的作用限制和格式化服务器返回给客户端的数据例如*app.post(/chat, response_modelChatResponse)*response_class与response_model的区别model改变了响应的数据结构而class改变响应的媒体格式且二者可以同时使用返回文件FileResponse场景后续拓展五、与外部 API 交互以 DeepSeek 为例为什么要用环境变量存储 API Key安全且高效OpenAI 客户端初始化base_url作用告诉客户端将请求发送到哪个服务器地址构造messages列表的格式messages [{role: user, content: request.message}]这是 OpenAI API 标准的对话消息格式role可以是user、assistant、system。DeepSeek 完全兼容此格式。调用client.chat.completions.create的核心参数modeltemperaturemax_tokens本周并未进行模型具体调优学习下周进行深入学习异常处理try...exceptHTTPException捕获异常并通过raise HTTPException(status_code500, detailstr(e))返回异常六、前后端交互与 CORS前端fetch基本用法本周仅实践未深入原理方法methodPOST请求头headersContent-Type: application/json请求体body与JSON.stringify将{ message }转为 JSON 字符串处理响应res.ok、res.json()检查状态码解析 JSON详细机制将在后续前端课程中学习。错误处理网络错误、HTTP 错误状态已实现简单的错误提示但未系统学习。后续会补充。CORS 跨域问题为了解决浏览器“file://”协议或不同端口导致的跨域限制在后端添加了CORSMiddleware允许所有源。具体原理和配置细节待深入学习。七、常见问题与解决踩坑记录问题现象原因解决方法端口被占用上一个 uvicorn 进程未完全退出或后台有残留进程先netstat -ano | findstr :8000找到 PID再通过taskkill /PID PID /F强制结束或重启电脑环境变量未生效每次打开新终端需重新设置或在 IDE 中运行时未继承系统环境变量在终端中执行$env:DEEPSEEK_API_KEYsk-xxxPowerShell或将 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[*]开发环境