news 2026/5/11 18:58:21

FastAPI后端和VUE前端的数据交互原理详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FastAPI后端和VUE前端的数据交互原理详解

我分3 层给你讲清楚:

① 这段 CORS 代码到底干嘛
② FastAPI 和 Vue 是如何“前后端交互”的
③ 浏览器在中间扮演了什么角色(为什么不加 CORS 会报错)

你看完这部分,前后端交互在你脑子里会是“透明的”


一、这段 CORS 代码是不是“用来前后端交互的”?

❌ 不完全是

✅ 它是「允许浏览器发起跨域请求」的开关

你的代码 👇

fromfastapi.middleware.corsimportCORSMiddleware origins=["http://localhost:8080"]app.add_middleware(CORSMiddleware,allow_origins=origins,allow_credentials=True,allow_methods=["*"],allow_headers=["*"],)

它的真实作用是:

告诉浏览器:

👉「来自http://localhost:8080的网页
👉 可以合法访问我这个 FastAPI 服务」

⚠️ 注意一句非常重要的话:

FastAPI 和 Vue 本身不需要 CORS
CORS 是“浏览器的安全策略”


二、FastAPI 和 Vue 是如何真正“交互”的?(核心原理)

🧠 本质一句话:

Vue 用 HTTP 请求调用 FastAPI 的 API

就像:

浏览器 → HTTP → FastAPI → 数据库

三、真实的请求链路(你现在的项目)

你现在的架构是:

Vue (localhost:8080) | | HTTP 请求(axios / fetch) ↓ FastAPI (localhost:8000) | | SQLAlchemy ↓ PostgreSQL (Docker / Linux)

四、一步一步拆解「一次前后端交互」

① Vue 发起请求(浏览器里)

axios.post("http://localhost:8000/api/v1/stats",{category:"CI_JOB",value:10})

⚠️ 这一步发生在浏览器里(不是 Node)


② 浏览器检查:跨域了吗?

项目VueFastAPI
协议httphttp
域名localhostlocalhost
端口80808000

👉端口不同 = 跨域


③ 浏览器说:我不信任这个请求 😈

于是:

  • 浏览器先发一个OPTIONS 预检请求
  • 问 FastAPI:

“你允许localhost:8080调用你吗?”


④ FastAPI 的 CORS 中间件回应

你的代码让 FastAPI 回答:

Access-Control-Allow-Origin: http://localhost:8080 Access-Control-Allow-Methods: * Access-Control-Allow-Headers: *

浏览器一看:

“OK,是合法的 👍”


⑤ 真正的 POST / GET 请求才被发送

FastAPI 路由执行:

@router.post("/stats")defcreate_stat(...):...

数据写入 PostgreSQL


⑥ FastAPI 返回 JSON

{"id":1,"category":"CI_JOB","value":10,"created_at":"2025-01-01T12:00:00"}

⑦ Vue 拿到数据,更新页面(响应式)

this.stats.push(res.data)

页面自动刷新 ✔


五、关键认知:谁和谁在通信?

角色作用
Vue负责 UI + 发 HTTP 请求
浏览器安全检查(CORS)
FastAPI提供 API
PostgreSQL存数据

👉Vue ≠ 后端
👉FastAPI ≠ 前端
👉 它们只是通过HTTP 协议对话


六、为什么 curl / Postman 不需要 CORS?

你可能注意到:

curlhttp://localhost:8000/api/v1/stats

👉 永远不会报 CORS 错

原因:

只有浏览器才实现 CORS

Postman / curl = 直接发 HTTP


七、生产环境为什么“又不需要 CORS”?

开发环境(你现在)

Vue: http://localhost:8080 FastAPI: http://localhost:8000

👉 不同端口 → 跨域 → 要 CORS


生产环境(常见)

https://stats.company.com ├── / → Vue └── /api → FastAPI

👉同域名、同端口

🚫根本没有跨域问题


八、你的这段 CORS 写法是否正确?(结论)

✅ 现在:完全正确(开发期推荐)

origins=["http://localhost:8080"]

⚠️ 不推荐这样(不安全)

allow_origins=["*"]

九、给你一张「前后端交互心智模型」

Vue (页面) ↓ axios / fetch 浏览器(CORS 检查) ↓ FastAPI API ↓ 数据库

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/11 18:58:20

通信工程毕业论文(毕设)易上手选题100例

【单片机毕业设计项目分享系列】 🔥 这里是DD学长,单片机毕业设计及享100例系列的第一篇,目的是分享高质量的毕设作品给大家。 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的单片机项目缺少创新和亮点…

作者头像 李华
网站建设 2026/5/11 18:58:19

Mysql中触发器使用详详详详详解~

01什么是触发器触发器是与表有关的数据库对象,在对表进行insert/update/delete之前或之后,会触发并执行触发器中定义的SQL语句。触发器的这种特性可以协助应用在数据库端确保数据的完整性,记录日志,校验数据等。简单的说,就是一张表发生了某件…

作者头像 李华
网站建设 2026/5/2 17:20:20

PyTorch模型加载Qwen3-32B时报OOM?显存优化建议

PyTorch加载Qwen3-32B显存爆炸?一文讲透高效运行方案 在构建企业级AI系统时,你是否曾遇到这样的窘境:明明手握RTX 4090或A100,却连一个开源的Qwen3-32B都加载不起来?屏幕上赫然弹出“CUDA out of memory”&#xff0c…

作者头像 李华
网站建设 2026/5/3 6:15:44

PN学堂-《电子元器件》- 电容

电容,作为电子电路中最基础、最普遍的无源元件之一,其“隔直通交”的基本特性看似简单,却在不同电路场景中展现出丰富而多样的功能。在PN学堂的电子元器件课程中,我们特别强调:理解电容不能只看参数,更要结…

作者头像 李华
网站建设 2026/4/25 11:15:13

LangChain+Seed-Coder-8B-Base构建企业级代码自动化系统

LangChain Seed-Coder-8B-Base 构建企业级代码自动化系统 在现代软件研发节奏日益加快的背景下,企业对开发效率、代码质量与团队协作一致性的要求达到了前所未有的高度。传统“人写代码—机器执行”的线性模式正悄然被“人机协同编程”所取代。智能补全、函数自动生…

作者头像 李华
网站建设 2026/5/1 10:16:48

Modbus转EtherCAT网关:真空浓缩设备的 “通讯加速器”

在现代工业自动化领域,Modbus RTU和EtherCAT是两种广泛使用的通信协议,它们分别扮演着重要的角色。将Modbus RTU协议转换为EtherCAT协议,并分析其在真空浓缩设备中的应用。Modbus RTU是一种串行通信协议,广泛应用于各种工业设备中…

作者头像 李华