这几年python这个编程语言是非常的火的,学习python的人越来越多,我最近也在学习python编程,为了更快的掌握python的编程语法,肯定少不了项目练习。今天就分享一个我使用python的fastApi框架开发的一个校园管理系统。
先说一下使用的技术:
后端框架:FastAPI
数据库:MySQL 8
前端:Vue2 + Element UI
实现的功能有:
课程管理 教师管理 学生管理
公告管理 管理员管理 教学楼管理
宿舍管理 年级管理 班级管理
一共实现了大概9个菜单的功能,实际功能还是挺多的。如果我们想快速的掌握一门编程语言肯定少不了大量的项目练习,尤其是英文不好的小伙伴,更需要大量的项目练习,来熟悉一门编程语言的语法的写法。我的习惯是 当开始学习一门新的技术的时候,了解完了编程语言的基本语法后,就尝试着开始写一些小项目来熟悉这些语法,虽然这个过程很慢(因为不熟悉),但是我觉得效果是真的好,当你慢慢的写了一两个项目后,你就会对这门编程语言有了新的理解。
好了下面给大家看一下这个项目实现的一些页面效果!
首页:
课程列表:
教师列表:
页面功能还是挺多的,这里就不一一分享了,主要是分享我自己的学习心得和体会,如果你在学习python,希望对你有所帮助。
想更多的了解这个项目,可以获取一下完整的源码。(非开源项目) wwwoop.com/home/Index/…
零星代码:
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="删除成功")