news 2026/4/15 18:02:30

FastAPI+VUE3创建一个项目的步骤模板(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FastAPI+VUE3创建一个项目的步骤模板(一)

先不细究功能细节,先把项目跑起来
一篇文章最多5606个字,因此同样分多P来记录

为fastapi准备环境

# 1. 创建项目文件夹 mkdir fastvue-todo cd fastvue-todo # 2. 创建并激活虚拟环境 (推荐) python -m venv venv # Windows: # venv\Scripts\activate # Linux/macOS: source venv/bin/activate # 3. 安装必要的库 # fastapi: 核心框架 # uvicorn: ASGI 服务器,用于运行应用 # pydantic: FastAPI 用它来进行数据验证和序列化 (用于定义你的 Task 模型) # python-multipart: 用于处理表单数据,尽管我们主要用 JSON,但装上无妨 pip install fastapi uvicorn pydantic python-multipart # ❗ 我们还需要安装 CORS 库,用于让前端可以访问后端 pip install python-multipart "uvicorn[standard]" fastapi

建立fastapi文件

在 fastvue-todo 目录下创建一个文件 main.py,并输入以下代码:

# main.pyfromfastapiimportFastAPIfrompydanticimportBaseModelfromtypingimportList,Optionalfromfastapi.middleware.corsimportCORSMiddleware# 导入 CORS# --------------------------# 1. Pydantic 模型定义# --------------------------# 它定义了任务的数据结构,与你刚才确定的字段一致classTask(BaseModel):id:int# 唯一标识title:str# 任务内容/描述is_completed:bool=False# 状态,默认未完成# --------------------------# 2. FastAPI 初始化# --------------------------app=FastAPI()# --------------------------# 3. 配置 CORS# --------------------------# 这允许在不同端口运行的前端 (Vue 3) 访问这个后端 (FastAPI)。# ⚠️ 注意: 在实际生产环境中,你应该将 "*" 替换为你的前端域名,例如: ["http://localhost:5173"]origins=["http://localhost","http://localhost:8000","http://localhost:5173",# Vue 3/Vite 默认端口]app.add_middleware(CORSMiddleware,allow_origins=origins,# 允许的来源列表allow_credentials=True,# 允许 Cookie/认证信息allow_methods=["*"],# 允许所有 HTTP 方法 (GET, POST, PUT, DELETE)allow_headers=["*"],# 允许所有 HTTP 头)# --------------------------# 4. 简单的数据存储 (内存中)# --------------------------# 生产环境应该使用数据库,这里为了快速启动,我们使用一个列表来模拟存储tasks_db:List[Task]=[Task(id=1,title="学习 FastAPI",is_completed=False),Task(id=2,title="搭建 Vue 3 前端",is_completed=True),]next_id=3# 用于分配下一个任务 ID# --------------------------# 5. API 路由定义 (CRUD)# --------------------------# GET /tasks: 读取所有任务 (R - Read All)@app.get("/tasks",response_model=List[Task])defread_tasks():returntasks_db# POST /tasks: 创建新任务 (C - Create)@app.post("/tasks",response_model=Task)defcreate_task(task:Task):globalnext_id task.id=next_id next_id+=1tasks_db.append(task)returntask# PUT /tasks/{task_id}: 更新任务状态 (U - Update)@app.put("/tasks/{task_id}",response_model=Task)defupdate_task(task_id:int,task:Task):# 查找任务fori,tinenumerate(tasks_db):ift.id==task_id:tasks_db[i]=task# 替换整个任务对象returntask# 如果没找到,FastAPI 默认会返回 404fromfastapiimportHTTPExceptionraiseHTTPException(status_code=404,detail="Task not found")# DELETE /tasks/{task_id}: 删除任务 (D - Delete)@app.delete("/tasks/{task_id}")defdelete_task(task_id:int):globaltasks_db initial_len=len(tasks_db)# 使用列表推导式删除任务tasks_db=[tfortintasks_dbift.id!=task_id]iflen(tasks_db)==initial_len:fromfastapiimportHTTPExceptionraiseHTTPException(status_code=404,detail="Task not found")return{"message":"Task deleted successfully"}

运行后端(fastapi)

在命令行中,确保你在 fastvue-todo 目录下,并执行:

uvicorn main:app --reload 这里的main是指文件名main.py 是将其映射为app 现在你的 FastAPI 后端应该已经在运行了,默认地址是 http://127.0.0.1:8000。

测试运行起来的API接口

FastAPI 的一个巨大优势是它基于OpenAPI (Swagger)规范自动生成交互式文档。这使得测试接口变得非常简单,无需额外工具。

1. 访问 API 文档

请确保后端仍在运行中(如果在命令行中运行了uvicorn main:app --reload,它应该一直运行着)。

  1. 打开浏览器,访问以下地址:
    [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)\text{[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)}[http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs)

将看到一个名为“Swagger UI”的界面,列出了刚才定义的所有 API 接口。

2. 测试 CRUD 操作

A. 读取所有任务 (R - Read All)

  • 接口:GET /tasks
  • 操作:
    1. 点击/tasks旁边的GET标签,展开它。
    2. 点击右侧的“Try it out”按钮。
    3. 点击“Execute”按钮。
  • 预期结果:
    Response body中,你应该会看到一个包含我们初始定义的两个任务的 JSON 数组:
    [{"id":1,"title":"学习 FastAPI","is_completed":false},{"id":2,"title":"搭建 Vue 3 前端","is_completed":true}]

B. 创建新任务 (C - Create)

  • 接口:POST /tasks
  • 操作:
    1. 点击/tasks旁边的POST标签,展开它。
    2. 点击“Try it out”按钮。
    3. Request body区域,修改 JSON 内容(id字段可以省略或设置为任意值,因为后端会分配新的 ID):
      {"title":"连接前端和后端","is_completed":false}
    4. 点击“Execute”按钮。
  • 预期结果:
    Response body中,你会看到新创建的任务对象,其中id应该被分配为3
    {"id":3,"title":"连接前端和后端","is_completed":false}

C. 更新任务状态 (U - Update)

  • 接口:PUT /tasks/{task_id}
  • 操作:我们来将 ID 为 3 的新任务标记为已完成。
    1. 点击/tasks/{task_id}旁边的PUT标签,展开它。
    2. 点击“Try it out”按钮。
    3. task_id路径参数中输入3
    4. Request body区域,输入完整的任务对象(确保包含 ID):
      {"id":3,"title":"连接前端和后端","is_completed":true}
    5. 点击“Execute”按钮。
  • 预期结果:
    Response body中,你会看到任务 3 的is_completed字段变成了true

Vue的创建

# 1. 退出当前的fastvue-todo目录,回到父级目录cd..# 2. 使用 npm (Node Package Manager) 初始化一个 Vue 项目# 如果你没有安装 Node.js/npm,请先安装。npmcreate vue@latest# 提示: 遇到提示时,输入以下选项# Project name: (输入) vue-frontend# Add TypeScript? (输入) No# Add JSX Support? (输入) No# Add Vue Router? (输入) No# Add Pinia? (输入) No# Add Vitest? (输入) No# Add Cypress? (输入) No# Add ESLint? (输入) No# 3. 进入新的前端目录cdvue-frontend# 4. 安装依赖npminstall# 5. 运行开发服务器npmrun dev
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 15:48:40

Codebuddy使用CloudBase MCP辅助AI编码基于Spec工作流开发的坦克大战小游戏

目录引言一、什么是基于Spec的工作流二、基于Spec的工作流实现方式1、专为规范驱动设计的IDE2、集成规范驱动功能的工具或插件三、实践开发坦克大战小游戏1、IDE Codebuddy插件安装CloudBase MCP2、需求澄清3、技术方案设计4、任务分解5、技术实现总结引言 在上一篇文章《浅谈…

作者头像 李华
网站建设 2026/4/12 22:45:12

Java真的不行了,一天收到586份简历

这是小红书上一位招聘Java的人事发布的Java人员找工作现状。 Java以前有多火,现在就有多难挤进这条赛道,岗位越来越少,就业人越来越多,技术越来越新,时代越来越进步,这十分要求还在传统Java道路上的人&…

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

“N皇后”问题解法

C实现N皇后问题(回溯法详解OJ适配)一、核心问题分析不同行:由于每个皇后占一行,可简化为“逐行放置”(每行仅放一个皇后)不同列:同一列不能有两个皇后不同对角线:主对角线&#xff0…

作者头像 李华
网站建设 2026/4/13 14:13:22

Part 11|模块划分并非越细越好,关键在于明确职责边界

在明确要从业务边界开始拆系统之后,我很快遇到了一个新的现实问题:业务边界清楚了,但模块到底要拆到什么程度?一开始,我其实很容易走向一个极端: 既然要清晰,那就尽量拆细一点。 但真正把模块往…

作者头像 李华
网站建设 2026/4/4 0:50:29

设计模式之-观察者模式

1.先来看一个简单的例子 // 观察者 class Observer {update(data){// 观察者收到数据变化,自行处理要做的事情console.log(接收到了数据:--,data);} } // 目标 class Subject {constructor(){// 维护所有的观察者列表this.observers [];}add(ob){// 添…

作者头像 李华
网站建设 2026/4/8 8:59:34

单北斗GNSS在桥梁形变监测与维护中的应用与优势分析

本文旨在深度分析单北斗GNSS在桥梁形变监测与维护中的应用与优势。首先,单北斗GNSS厂家提供的各类产品,如变形监测一体机和传感器,具备独特的技术特性,能够满足不同桥梁监测需求。其次,监测系统的定制与实施方法&#…

作者头像 李华