news 2026/4/18 13:24:25

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/18 8:10:08

Java面试题含答案——2025年最新完整分享,收藏这篇就够了

目录 前言 一、基础篇 1.1.Java语言有哪些特点 1.2.面向对象和面向过程的区别 1.3.八种基本数据类型的大小,以及他们的封装类 1.4.标识符的命名规则。 1.5.instanceof 关键字的作用 1.6.Java自动装箱与拆箱 1.7.重载和重写的区别 1.8.equals与的区别 1.9…

作者头像 李华
网站建设 2026/4/18 4:19:10

【编号645】全国省市县行政区划矢量数据2025年更新

今天小编整理分享的是 全国省市县行政区划矢量数据2025年更新 。市边界省边界县边界概况数据概况全国省市县行政区划矢量数据2025年更新全国省市县行政区划矢量数据2025年更新。shp/geojson数据,WGS84坐标系。包括我国省份、地级市、区县三个层级的行政区划矢量数…

作者头像 李华
网站建设 2026/4/18 9:41:22

TypeScript语法

这些是 MobX-State-Tree (MST)​ 的核心语法,用于定义可观察的状态树模型。我来详细解释每个部分:1. types对象的作用types是 MST 库导出的类型构建器集合,用于定义数据模型的形状、验证规则和行为。import { types } from "mobx-state-…

作者头像 李华
网站建设 2026/4/18 8:48:06

基于 RT-Thread Studio 实战:ESP8266+MQTT

作为嵌入式开发爱好者,在完成 ESP8266 结合 MQTT 协议的物联网通信实战后,我决定将整个过程记录并分享出来。本文以正点原子 F429 开发板 ESP8266 无线模块为硬件载体,基于 RT-Thread Studio 开发环境,搭配 EMQX 云服务器&#x…

作者头像 李华
网站建设 2026/4/18 2:56:35

智能压力测试代理系统:基于AI的自动化压测解决方案

作者:质立方qiyanfei 原创文章,转载请注明出处项目概述 实现了一个功能强大的智能压力测试代理系统。该系统基于LangGraph框架和DeepSeek AI模型,通过多智能体协作实现了全流程的自动化压力测试。 系统架构设计 1. 核心组件架构 用户请求 → …

作者头像 李华