Axios与FastAPI结合:构建并请求用户增删改查接口

在现代Web开发中,FastAPI以其高性能和简洁的代码结构成为了构建RESTful API的热门选择。而Axios则因其基于Promise的HTTP客户端特性,成为了前端与后端交互的理想工具。本文将介绍FastAPI和Axios的结合使用,通过一个用户增删改查(CRUD)接口的实例,展示如何构建和请求API。

FastAPI简介

FastAPI是一个现代、快速的Web框架,用于构建API。它基于Python 3.6+类型提示,结合了Pydantic和Starlette的功能,提供了数据验证和序列化。FastAPI的核心优势在于其高性能、易用性、自动化文档生成以及对现代Python编程实践的深度支持。

Axios简介

Axios是一个基于Promise的HTTP客户端,广泛用于浏览器和Node.js环境。它以其简洁的API和强大的功能,成为了现代Web开发中不可或缺的工具。Axios的核心特性包括从浏览器创建XMLHttpRequests、从Node.js创建http请求、支持Promise API、拦截请求和响应、转换请求和响应数据、取消请求等。

FastAPI开发用户CRUD接口案例

以下是一个使用FastAPI和SQLModel实现用户CRUD操作的简单案例:

1. 安装依赖

首先,确保安装了FastAPI和SQLModel:

pip install fastapi uvicorn sqlmodel

2. 定义模型

models.py中定义用户模型:

from sqlmodel import SQLModel, Field

class UserBase(SQLModel):
    name: str
    age: int = Field(default=None, nullable=True)

class User(UserBase, table=True):
    id: int = Field(default=None, primary_key=True)

3. 创建数据库引擎

database.py中设置数据库连接和表:

from sqlmodel import create_engine

DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL)

4. 实现CRUD操作

crud.py中实现CRUD操作:

from models import User
from database import engine
from sqlmodel import Session, select

def get_user(user_id: int):
    stmt = select(User).where(User.id == user_id)
    with Session(engine) as session:
        return session.exec(stmt).first()

def create_user(user: User):
    with Session(engine) as session:
        session.add(user)
        session.commit()
        session.refresh(user)
        return user

def update_user(user_id: int, user: User):
    user.id = user_id
    with Session(engine) as session:
        session.add(user)
        session.commit()
        session.refresh(user)
        return user

def delete_user(user_id: int):
    user = get_user(user_id)
    if user:
        with Session(engine) as session:
            session.delete(user)
            session.commit()
            return True
    return False

5. 创建API端点

main.py中创建API端点:

from fastapi import FastAPI, HTTPException, Depends
from database import engine
from crud import create_user, get_user, update_user, delete_user
from models import User

app = FastAPI()

@app.on_event("startup")
def on_startup():
    SQLModel.metadata.create_all(engine)

@app.post("/users/", response_model=User)
def create_user_endpoint(user: User):
    return create_user(user)

@app.get("/users/{user_id}", response_model=User)
def read_user(user_id: int):
    user = get_user(user_id)
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user

@app.put("/users/{user_id}", response_model=User)
def update_user_endpoint(user_id: int, user: User):
    user.id = user_id
    updated_user = update_user(user_id, user)
    if not updated_user:
        raise HTTPException(status_code=404, detail="User not found")
    return updated_user

@app.delete("/users/{user_id}", response_class=HTTPException)
def delete_user_endpoint(user_id: int):
    if not delete_user(user_id):
        raise HTTPException(status_code=404, detail="User not found")
    return {"detail""User deleted"}

使用Axios请求FastAPI接口

1. 安装Axios

在项目中安装Axios:

npm install axios

2. 请求用户数据

获取用户列表
axios.get('http://localhost:8000/users')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error('Error fetching users:', error);
  });
创建新用户
axios.post('http://localhost:8000/users', {
  name'John Doe',
  age30
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error('Error creating user:', error);
});
更新用户信息
axios.put('http://localhost:8000/users/1', {
  name'John Doe Updated',
  age31
})
.then(response => {
  console.log(response.data);
})
.catch(error => {
  console.error('Error updating user:', error);
});
删除用户
axios.delete('http://localhost:8000/users/1')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error('Error deleting user:', error);
  });

结论

FastAPI和Axios的结合为现代Web应用开发提供了一个强大而灵活的平台。FastAPI的高性能和易用性,结合Axios的简洁API和强大的HTTP客户端功能,使得从后端到前端的整个开发流程变得更加高效和可靠。通过上述步骤,我们可以看到如何使用FastAPI构建CRUD接口,并通过Axios进行请求,展示了FastAPI和Axios在实际开发中的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/62394.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解B-树与B+树:数据结构中的高效索引利器

一、引言 在数据库系统中,索引是提高查询效率的关键技术。而B-树和B树作为常用的索引数据结构,以其高效的查询、插入和删除操作备受青睐。下面我们将分别探讨B-树和B树的结构及其优缺点。 二、B-树 B-树简介 B-树(Balanced Tree&#xff…

DVWA 在 Windows 环境下的部署指南

目录预览 一、靶场介绍二、前置准备1. 环境准备2.靶场下载 三、安装步骤1.配置Phpstudy2.配置数据库3.配置DVWA4.登入DVWA靶场 四、参考链接 一、靶场介绍 DVWA 一共包含了十个攻击模块,分别是: Brute Force(暴力(破解&#xff…

Spring Bean 初始化如何保证线程安全

创作内容丰富的干货文章很费心力,感谢点过此文章的读者,点一个关注鼓励一下作者,激励他分享更多的精彩好文,谢谢大家! Spring Bean 中的参数通常有几种初始化方法: 通过构造函数注入: @Service public void MyService {private MyData myData;public MyService(MyData…

虚拟机ubuntu-20.04.6-live-server搭建OpenStack:Victoria(二:OpenStack环境准备-compute node)

文章目录 Host networkinga. 配置网络接口b. 验证连通性 Network Time Protocol (NTP)a. 安装并配置组件b. 验证操作 OpenStack packagesa. 下载Victoria云存储仓库b. 安装示例c. 安装客户端 沉浸版指令及内容: Host networking a. 配置网络接口 切换至超级用户模…

微软企业邮箱:安全可靠的企业级邮件服务!

微软企业邮箱的设置步骤?如何注册使用烽火域名邮箱? 微软企业邮箱作为一款专为企业设计的邮件服务,不仅提供了高效便捷的通信工具,更在安全性、可靠性和功能性方面树立了行业标杆。烽火将深入探讨微软企业邮箱的多重优势。 微软…

使用UE5.5的Animator Kit变形器

UE5.5版本更新了AnimatorKit内置插件,其中包含了一些内置变形器,可以辅助我们的动画制作。 操作步骤 首先打开UE5.5,新建第三人称模板场景以便测试,并开启AnimatorKit组件。 新建Sequence,放入测试角色 点击角色右…

JS异步进化与Promise

JavaScript 是单线程的,但它并不是无法处理异步操作。相反,JavaScript 的单线程特性和其事件循环机制使得它在处理异步任务方面非常高效 回调函数(Callback Functions) 一开始JS使用回调的形式来处理异步的结果,但是异步的弊端很大 例如:无法更好的处理…

应用案例丨坤驰科技双通道触发采集实时FFT数据处理系统

双通道触发采集实时FFT数据处理系统 应用案例 双通道采集,每路通道需要2GSPS的采样率,每2毫秒采集一次,每次采集数据量为65536*2 Sample。采集的信号频率满足奈奎斯特采样定律。采集数据后,每路通道的数据均做运算以及FFT实时处理…

OGRE 3D----3. OGRE绘制自定义模型

在使用OGRE进行开发时,绘制自定义模型是一个常见的需求。本文将介绍如何使用OGRE的ManualObject类来创建和绘制自定义模型。通过ManualObject,开发者可以直接定义顶点、法线、纹理坐标等,从而灵活地构建各种复杂的几何体。 Ogre::ManualObject 是 Ogre3D 引擎中的一个类,用…

如何用Excel做数据可视化自动化报表?

作为一个经常需要做数据报表的人,我最常用的工具是Excel,对于我来说用Excel处理繁琐冗杂的数据并不难,但是我发现身边很多人用Excel做的数据报表非常的耗时,而且最后的成品也是难以直视,逻辑和配色等都非常的“灾难”。…

结构型模式-组合模式

组合模式(Composite Pattern)是一种结构型设计模式,它通过将对象组合成树形结构来表示“部分-整体”的层次结构,从而使客户端对单个对象和组合对象的使用具有一致性。 适用场景 需要表示对象的层次结构:如文件系统、组…

HOW - React 状态模块化管理和按需加载(二) - jotai

目录 一、背景二、jotai 介绍2.1 基本介绍Jotai 的核心特点在现有项目中使用 Jotai 的场景 2.1 jotai 使用安装 Jotai基本使用方法1. 创建 Atom(状态单元)2. 使用 Atom3. 全局共享状态 与 Ant Design 和 Redux 的结合1. 替代局部状态的 Redux 实现2. 与 …

基于FPGA的SD NAND读写测试(图文并茂+源代码+详细注释)

本实验所使用的源代码已同步至个人主页的资源处,可供读者自行学习...... 什么是SD NAND? 1.SD NAND 卡介绍 SD NAND 卡是一种基于 NAND 闪存技术的存储设备,其外观和接口类似于标准的 SD 卡。它将 NAND 闪存芯片和必要的控制电路集成在一个小…

机器学习6-梯度下降法

梯度下降法 目的 梯度下降法(Gradient Descent)是一个算法,但不是像多元线性回归那样是一个具体做回归任务的算法,而是一个非常通用的优化算法来帮助一些机器学习算法求解出最优解的,所谓的通用就是很多机器学习算法都是用它,甚…

(0基础保姆教程)-JavaEE开课啦!--11课程(初识Spring MVC + Vue2.0 + Mybatis)-实验9

一、什么是Spring MVC? Spring MVC 是一个基于 Java 的 Web 框架,遵循 MVC 设计模式,用于构建企业级应用程序。它通过控制器(Controller)处理用户请求,模型(Model)处理业务逻辑,视图(View)展示数据,实现了请…

微前端-MicroApp

微前端即是由一个主应用来集成多个微应用(可以不区分技术栈进行集成) 下面是使用微前端框架之一 MicroApp 对 react微应用 的详细流程 第一步 创建主应用my-mj-app 利用脚手架 npx create-react-app my-mj-app 快速创建 安装 npm install --save rea…

python画图plt.close()一直闪烁

解决方法: import matplotlib matplotlib.use(Agg) # 设置后端为 Agg 在Matplotlib中,’后端’(backend)指的是用于实际绘制图形的底层图形库。Matplotlib支持多种后端,如’TkAgg’、’Qt5Agg’、’WXAgg’等&…

知识库助手的构建之路:ChatGLM3-6B和LangChain的深度应用

ChatGLM3-6B和LangChain构建知识库助手 安装依赖库 使用pip命令安装以下库: pip install modelscope langchain0.1.7 chromadb0.5.0 sentence-transformers2.7.0 unstructured0.13.7 markdown3.0.0 docx2txt0.8 pypdf4.2.0依赖库简介: ModelScope&a…

MySQL中的count函数

1. COUNT() 是什么? 在 MySQL 中,COUNT() 是一个聚合函数,用于统计结果集中行的数量。它常见的几种用法包括: COUNT(*):统计结果集中所有行的数量,包括包含 NULL 的行。COUNT(1):统计结果集中所…

shell(2)永久环境变量和字符串显位

shell(2)永久环境变量和字符串显位 声明! 学习视频来自B站up主 ​泷羽sec​​ 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习…