FastAPI 学生信息管理 API(CRUD 操作)实现
随着互联网技术的飞速发展,API(应用程序编程接口)已成为现代软件开发中不可或缺的一部分。FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,它基于标准 Python 类型提示,具有异步支持。本文将围绕 Python 语言,使用 FastAPI 框架构建一个学生信息管理 API,实现基本的 CRUD(创建、读取、更新、删除)操作。
环境准备
在开始之前,请确保您已经安装了以下软件:
- Python 3.6 或更高版本
- FastAPI
- uvicorn(用于运行 FastAPI 应用)
您可以使用以下命令安装所需的包:
bash
pip install fastapi uvicorn
项目结构
以下是一个简单的项目结构示例:
student_api/
│
├── main.py FastAPI 应用主文件
├── models.py 数据模型定义
├── schemas.py 数据验证和序列化
└── database.py 数据库操作
数据模型定义
在 `models.py` 文件中,我们定义学生信息的数据模型。
python
from pydantic import BaseModel
class Student(BaseModel):
id: int
name: str
age: int
grade: str
数据验证和序列化
在 `schemas.py` 文件中,我们定义学生信息的验证和序列化。
python
from pydantic import BaseModel
class StudentCreate(BaseModel):
name: str
age: int
grade: str
class StudentUpdate(BaseModel):
name: str = None
age: int = None
grade: str = None
数据库操作
在 `database.py` 文件中,我们定义数据库操作。
python
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
class Student(Base):
__tablename__ = "students"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, index=True)
age = Column(Integer, index=True)
grade = Column(String, index=True)
def __repr__(self):
return f""
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
FastAPI 应用主文件
在 `main.py` 文件中,我们创建 FastAPI 应用,并定义 CRUD 操作的路由。
python
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from . import models, schemas, database
app = FastAPI()
def get_db():
db = database.SessionLocal()
try:
yield db
finally:
db.close()
@app.post("/students/", response_model=schemas.Student)
def create_student(student: schemas.StudentCreate, db: Session = Depends(get_db)):
db_student = models.Student(name=student.name, age=student.age, grade=student.grade)
db.add(db_student)
db.commit()
db.refresh(db_student)
return db_student
@app.get("/students/", response_model=list[schemas.Student])
def read_students(db: Session = Depends(get_db)):
students = db.query(models.Student).all()
return students
@app.get("/students/{student_id}", response_model=schemas.Student)
def read_student(student_id: int, db: Session = Depends(get_db)):
db_student = db.query(models.Student).filter(models.Student.id == student_id).first()
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
return db_student
@app.put("/students/{student_id}", response_model=schemas.Student)
def update_student(student_id: int, student: schemas.StudentUpdate, db: Session = Depends(get_db)):
db_student = db.query(models.Student).filter(models.Student.id == student_id).first()
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
db_student.name = student.name
db_student.age = student.age
db_student.grade = student.grade
db.commit()
db.refresh(db_student)
return db_student
@app.delete("/students/{student_id}", status_code=204)
def delete_student(student_id: int, db: Session = Depends(get_db)):
db_student = db.query(models.Student).filter(models.Student.id == student_id).first()
if db_student is None:
raise HTTPException(status_code=404, detail="Student not found")
db.delete(db_student)
db.commit()
return {"detail": "Student deleted successfully"}
运行 FastAPI 应用
在终端中,运行以下命令启动 FastAPI 应用:
bash
uvicorn main:app --reload
现在,您可以使用 Postman 或其他 API 测试工具测试我们的学生信息管理 API。
总结
本文介绍了如何使用 FastAPI 框架和 Python 语言构建一个学生信息管理 API,实现了基本的 CRUD 操作。通过本文的学习,您应该能够掌握以下技能:
- 使用 FastAPI 框架创建 API
- 定义数据模型和验证
- 使用 SQLAlchemy 进行数据库操作
- 实现 CRUD 操作
希望本文对您有所帮助!
Comments NOTHING