使用python-fastApi框架开发校园管理系统练习项目源码-前后端分离

63 阅读3分钟

这几年python这个编程语言是非常的火的,学习python的人越来越多,我最近也在学习python编程,为了更快的掌握python的编程语法,肯定少不了项目练习。今天就分享一个我使用python的fastApi框架开发的一个校园管理系统。

先说一下使用的技术

后端框架:FastAPI

数据库:MySQL 8

前端:Vue2 + Element UI

实现的功能有:

课程管理 教师管理 学生管理

公告管理 管理员管理 教学楼管理

宿舍管理 年级管理 班级管理

一共实现了大概9个菜单的功能,实际功能还是挺多的。如果我们想快速的掌握一门编程语言肯定少不了大量的项目练习,尤其是英文不好的小伙伴,更需要大量的项目练习,来熟悉一门编程语言的语法的写法。我的习惯是 当开始学习一门新的技术的时候,了解完了编程语言的基本语法后,就尝试着开始写一些小项目来熟悉这些语法,虽然这个过程很慢(因为不熟悉),但是我觉得效果是真的好,当你慢慢的写了一两个项目后,你就会对这门编程语言有了新的理解。

好了下面给大家看一下这个项目实现的一些页面效果!

首页:

image.png

课程列表:

image.png

教师列表:

image.png

页面功能还是挺多的,这里就不一一分享了,主要是分享我自己的学习心得和体会,如果你在学习python,希望对你有所帮助。

想更多的了解这个项目,可以获取一下完整的源码。(非开源项目) wwwoop.com/home/Index/…

image.png

零星代码:

from typing import Optional
from fastapi import APIRouter, Depends, Query, Path
from sqlalchemy.orm import Session
from sqlalchemy import or_
from core.response import ResponseModel
from core.exceptions import CustomException
from core.deps import get_current_admin
from db.database import get_db
from models.course import Course
from models.admin import Admin
from schemas.course import CourseCreate, CourseUpdate, CourseResponse, CourseListResponse

router = APIRouter()

@router.post("/create")
async def create_course(
    course_data: CourseCreate, 
    db: Session = Depends(get_db),
    current_admin: Admin = Depends(get_current_admin)
):
    # 创建课程
    new_course = Course(
        course_name=course_data.course_name,
        sort_order=course_data.sort_order,
        status=course_data.status,
        remark=course_data.remark,
        created_id=current_admin.id,
        updated_id=current_admin.id
    )
    
    db.add(new_course)
    db.commit()
    db.refresh(new_course)
    
    return ResponseModel.success(
        data=CourseResponse.model_validate(new_course),
        msg="创建成功"
    )

@router.get("/list")
async def get_course_list(
    keyword: Optional[str] = None,
    status: Optional[int] = None,
    page: int = Query(1, ge=1),
    page_size: int = Query(10, ge=1, le=100),
    db: Session = Depends(get_db),
    current_admin: Admin = Depends(get_current_admin)
):
    # 查询条件
    query = db.query(Course).filter(Course.is_deleted == False)
    
    # 关键字搜索
    if keyword:
        query = query.filter(
            or_(
                Course.course_name.like(f"%{keyword}%"),
                Course.remark.like(f"%{keyword}%")
            )
        )
    
    # 状态筛选
    if status is not None:
        query = query.filter(Course.status == status)
    
    # 总数
    total = query.count()
    
    # 分页
    items = query.order_by(Course.sort_order.asc()).offset((page - 1) * page_size).limit(page_size).all()
    
    return ResponseModel.success(
        data=CourseListResponse(
            total=total,
            items=[CourseResponse.model_validate(item) for item in items]
        )
    )

@router.get("/detail/{course_id}")
async def get_course_detail(
    course_id: int = Path(..., gt=0),
    db: Session = Depends(get_db),
    current_admin: Admin = Depends(get_current_admin)
):
    # 查询课程
    course = db.query(Course).filter(Course.id == course_id, Course.is_deleted == False).first()
    
    if not course:
        raise CustomException(msg="课程不存在")
    
    return ResponseModel.success(
        data=CourseResponse.model_validate(course)
    )

@router.put("/update/{course_id}")
async def update_course(
    course_data: CourseUpdate,
    course_id: int = Path(..., gt=0),
    db: Session = Depends(get_db),
    current_admin: Admin = Depends(get_current_admin)
):
    # 查询课程
    course = db.query(Course).filter(Course.id == course_id, Course.is_deleted == False).first()
    
    if not course:
        raise CustomException(msg="课程不存在")
    
    # 更新课程信息
    course.course_name = course_data.course_name
    course.sort_order = course_data.sort_order
    course.status = course_data.status
    course.remark = course_data.remark
    course.updated_id = current_admin.id
    
    db.commit()
    db.refresh(course)
    
    return ResponseModel.success(
        data=CourseResponse.model_validate(course),
        msg="更新成功"
    )

@router.delete("/delete/{course_id}")
async def delete_course(
    course_id: int = Path(..., gt=0),
    db: Session = Depends(get_db),
    current_admin: Admin = Depends(get_current_admin)
):
    # 查询课程
    course = db.query(Course).filter(Course.id == course_id, Course.is_deleted == False).first()
    
    if not course:
        raise CustomException(msg="课程不存在")
    
    # 逻辑删除
    course.is_deleted = True
    course.updated_id = current_admin.id
    
    db.commit()
    
    return ResponseModel.success(msg="删除成功")