构建现代Web应用:FastAPI、SQLModel、Vue 3与Axios的结合使用

FastAPI介绍

FastAPI是一个用于构建API的现代、快速(高性能)的Web框架,使用Python并基于标准的Python类型提示。它的关键特性包括快速性能、高效编码、减少bug、智能编辑器支持、简单易学、简短代码、健壮性以及标准化。FastAPI自动提供了交互式API文档(Swagger UI和ReDoc),使得API的测试和使用变得异常简单。

SQLModel介绍

SQLModel是一个现代的Python ORM库,它结合了SQLAlchemy和Pydantic的优点,使得定义数据模型和数据库操作变得更加直观和高效。SQLModel通过使用Python类型注解来定义数据模型,最小化代码重复,无需在SQLAlchemy和Pydantic之间复制模型。它还支持异步操作,使得数据库操作更加高效。

FastAPI+SQLModel创建用户增删改查接口实例

以下是一个使用FastAPI和SQLModel实现用户增删改查(CRUD)操作的简单案例:

  1. 安装依赖

    pip install fastapi "uvicorn[standard]" sqlmodel
    
  2. 定义模型

    from sqlmodel import Field, SQLModel, create_engine
    
    class UserBase(SQLModel):
        id: int = Field(default=None, primary_key=True)
        name: str
        age: int = Field(default=None, nullable=True)
    
    class User(UserBase, table=True):
        pass
    
  3. 创建数据库和表

    from fastapi import FastAPI
    from sqlmodel import SQLModel, Session
    
    app = FastAPI()
    engine = create_engine("sqlite:///./test.db")
    SQLModel.metadata.create_all(engine)
    
    @app.on_event("startup",)
    def on_startup():
        SQLModel.metadata.create_all(engine)
    
    def get_session():
        with Session(engine) as session:
            yield session
    
  4. 实现CRUD操作

    from fastapi import Depends, HTTPException, status
    
    @app.post("/users/", response_model=User)
    def create_user(user: UserBase, session: Session = Depends(get_session)):
        session.add(user)
        session.commit()
        session.refresh(user)
        return user
    
    @app.get("/users/{user_id}", response_model=User)
    def read_user(user_id: int, session: Session = Depends(get_session)):
        db_user = session.query(User).filter(User.id == user_id).first()
        if db_user is None:
            raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
        return db_user
    
    @app.put("/users/{user_id}", response_model=User)
    def update_user(user_id: int, user: UserBase, session: Session = Depends(get_session)):
        db_user = session.query(User).filter(User.id == user_id).first()
        if db_user is None:
            raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
        db_user.name = user.name
        db_user.age = user.age
        session.commit()
        session.refresh(db_user)
        return db_user
    
    @app.delete("/users/{user_id}", response_model=User)
    def delete_user(user_id: int, session: Session = Depends(get_session)):
        db_user = session.query(User).filter(User.id == user_id).first()
        if db_user is None:
            raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
        session.delete(db_user)
        session.commit()
        return db_user
    

Vue 3介绍

Vue 3是Vue.js的第三个主要版本,引入了Composition API,这是一套新的基于函数的API,允许开发者更灵活地组织组件逻辑。Vue 3还带来了性能提升、更好的TypeScript支持、新的内置组件(如Fragment、Teleport、Suspense)等。

Axios介绍

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

Vite创建Vue3项目

Vite是一个新型前端构建工具,提供了快速的热重载(HMR)和对TypeScript、JSX、CSS等的支持。创建Vite项目可以遵循以下步骤:

  1. 新建项目目录

    npm create vite@latest my-vue-app -- --template vue
    
  2. 安装项目依赖

    cd my-vue-app
    npm install
    
  3. 启动项目

    npm run dev
    

Vue3整合Axios

在Vue 3项目的入口文件main.js中配置Axios:

import { createApp } from 'vue';
import App from './App.vue';
import axios from 'axios';

const app = createApp(App);
app.config.globalProperties.$axios = axios; // 将axios挂载到全局
app.mount('#app');

使用Axios请求用户增删改查接口

在Vue 3组件中使用Composition API和Axios发起HTTP请求:

<template>
  <div>
    <button @click="createUser">Create User</button>
    <button @click="fetchUsers">Fetch Users</button>
    <div v-for="user in users" :key="user.id">
      <p>{{ user.name }} - {{ user.age }}</p>
      <button @click="updateUser(user.id)">Update</button>
      <button @click="deleteUser(user.id)">Delete</button>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue';
import axios from 'axios';

const users = ref([]);

const createUser = async () => {
  const response = await axios.post('http://localhost:8000/users/', {
    name: 'John Doe',
    age: 30
  });
  users.value.push(response.data);
};

const fetchUsers = async () => {
  const response = await axios.get('http://localhost:8000/users/');
  users.value = response.data;
};

const updateUser = async (id) => {
  await axios.put(`http://localhost:8000/users/${id}`, {
    name: 'Jane Doe',
    age: 35
  });
  const index = users.value.findIndex(user => user.id === id);
  if (index !== -1) {
    users.value[index] = await axios.get(`http://localhost:8000/users/${id}`);
  }
};

const deleteUser = async (id) => {
  await axios.delete(`http://localhost:8000/users/${id}`);
  users.value = users.value.filter(user => user.id !== id);
};
</script>

<style scoped>
/* 样式 */
</style>

总结

FastAPI和SQLModel的结合为现代Web应用开发带来了一系列显著的优势,特别适合需要与SQL数据库交互的场景。Vue 3与Axios的结合为前端开发提供了强大的数据交互能力。通过Vite快速构建Vue 3项目,并整合Axios,我们可以高效地构建和请求用户增删改查接口,实现前后端的全栈开发。这种技术栈的结合不仅提高了开发效率,也为构建现代化的Web应用提供了强大的工具。

相关推荐
还需studystudy2 分钟前
Vue——使用html2pdf插件,下载pdf文档到本地
前端·vue.js·pdf
mit6.8246 分钟前
[Qt] 信号和槽(2) | 多对多 | disconnect | 结合lambda | sum
linux·前端·c++·qt·学习
A雄10 分钟前
2025新春烟花代码(一)HTML5夜景放烟花绽放动画效果
前端·html·html5
风度前端38 分钟前
使用GitHub Actions自动发布npm包
前端·npm·github
没有名字的小羊1 小时前
Cyber Security 101-Web Hacking-Burp Suite: The Basics(Burp Suite:基础知识)
前端·网络·测试工具·安全·web安全
SomeB1oody1 小时前
【Rust自学】9.3. Result枚举与可恢复的错误 Pt.2:传播错误、?运算符与链式调用
开发语言·前端·rust
CodeCraft Studio1 小时前
【实用技能】如何使用 Web 技术帮助提高 Java 桌面应用程序的可访问性
java·开发语言·前端·chrome
诗歌难吟4641 小时前
初始值变量类型
java·前端·javascript
Stanford_11061 小时前
关于单片机的基础知识(一)
前端·c++·单片机·嵌入式硬件·微信公众平台·twitter·微信开放平台
江停不会写代码1 小时前
VUE3组合式——响应式数据ref、reactive
前端·vue.js