当前位置: 首页 > news >正文

fastApi框架开发一个web端仓库管理系统

给大家分享一个最近我用python写的一个web项目,对于web项目,用java或者php来开发的比较多,但是为了快速的掌握一门编程语言,我们也可以尝试用别的语言来发开web项目,这篇文章就给大家介绍一下 使用 python fastApi框架 来开发一个仓库管理系统。
技术介绍:
后端框架:FastAPI
数据库:mysql8
前端:Vue2+Element UI
主要实现的功能有:
分类管理、产品管理、客户管理、供应商管理、仓库与库位管理、入库出库操作、管理员管理 。
页面介绍:
首页:
在这里插入图片描述
产品页:
在这里插入图片描述
入库记录:
在这里插入图片描述
出库记录:
在这里插入图片描述
这个项目一共实现了8个菜单的功能,如果你对这个项目有兴趣可以去看看。(非开源)
https://wwwoop.com/home/Index/projectInfo?goodsId=125&typeParam=1&subKey=-1

部分代码:

from typing import Optional
from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
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.admin import Admin
from models.product_category import ProductCategory
from schemas.product_category import ProductCategoryCreate, ProductCategoryUpdate, ProductCategoryResponse, ProductCategorySearchRequestrouter = APIRouter()@router.get("/list")
async def get_product_category_list(db: Session = Depends(get_db),current_admin: Admin = Depends(get_current_admin),page: int = Query(1, ge=1),page_size: int = Query(10, ge=1, le=100),category_name: Optional[str] = None,status: Optional[int] = None
):"""获取产品分类列表(分页,带搜索条件)"""# 构建查询条件,只查询未删除的记录query = db.query(ProductCategory).filter(ProductCategory.is_deleted == 0)# 分类名称搜索条件if category_name:query = query.filter(ProductCategory.category_name.like(f"%{category_name}%"))# 状态搜索条件if status is not None:query = query.filter(ProductCategory.status == status)# 按序号和创建时间排序query = query.order_by(ProductCategory.sort_order.asc(), ProductCategory.created_time.desc())# 分页查询total = query.count()categories = query.offset((page - 1) * page_size).limit(page_size).all()return ResponseModel.success(data={"items": [ProductCategoryResponse.model_validate(category) for category in categories],"total": total,"page": page,"page_size": page_size},msg="获取成功")@router.get("/detail/{category_id}")
async def get_product_category_detail(category_id: int,db: Session = Depends(get_db),current_admin: Admin = Depends(get_current_admin)
):"""获取产品分类详情"""category = db.query(ProductCategory).filter(ProductCategory.id == category_id,ProductCategory.is_deleted == 0).first()if not category:raise CustomException(msg="分类不存在")return ResponseModel.success(data=ProductCategoryResponse.model_validate(category),msg="获取成功")@router.post("/create")
async def create_product_category(category_in: ProductCategoryCreate,db: Session = Depends(get_db),current_admin: Admin = Depends(get_current_admin)
):"""创建产品分类"""# 检查分类名称是否已存在existing_category = db.query(ProductCategory).filter(ProductCategory.category_name == category_in.category_name,ProductCategory.is_deleted == 0).first()if existing_category:raise CustomException(msg="分类名称已存在")# 创建新分类db_category = ProductCategory(category_name=category_in.category_name,sort_order=category_in.sort_order,status=category_in.status,remark=category_in.remark,created_id=current_admin.id,updated_id=current_admin.id)db.add(db_category)db.commit()db.refresh(db_category)return ResponseModel.success(data=ProductCategoryResponse.model_validate(db_category),msg="创建成功")@router.put("/update/{category_id}")
async def update_product_category(category_id: int,category_in: ProductCategoryUpdate,db: Session = Depends(get_db),current_admin: Admin = Depends(get_current_admin)
):"""更新产品分类"""# 查找要更新的分类db_category = db.query(ProductCategory).filter(ProductCategory.id == category_id,ProductCategory.is_deleted == 0).first()if not db_category:raise CustomException(msg="分类不存在")# 如果要更新分类名称,检查是否与其他分类重名if category_in.category_name and category_in.category_name != db_category.category_name:existing_category = db.query(ProductCategory).filter(ProductCategory.category_name == category_in.category_name,ProductCategory.id != category_id,ProductCategory.is_deleted == 0).first()if existing_category:raise CustomException(msg="分类名称已存在")# 更新字段update_data = category_in.model_dump(exclude_unset=True)for field, value in update_data.items():setattr(db_category, field, value)# 更新操作者信息db_category.updated_id = current_admin.iddb.commit()db.refresh(db_category)return ResponseModel.success(data=ProductCategoryResponse.model_validate(db_category),msg="更新成功")@router.delete("/delete/{category_id}")
async def delete_product_category(category_id: int,db: Session = Depends(get_db),current_admin: Admin = Depends(get_current_admin)
):"""删除产品分类(软删除)"""# 查找要删除的分类db_category = db.query(ProductCategory).filter(ProductCategory.id == category_id,ProductCategory.is_deleted == 0).first()if not db_category:raise CustomException(msg="分类不存在")# 软删除db_category.is_deleted = 1db_category.updated_id = current_admin.iddb.commit()return ResponseModel.success(data=None,msg="删除成功")
http://www.dtcms.com/a/395498.html

相关文章:

  • mosquitto求医之路(3):Docker安装也不好使
  • 字节 TRAE:AI 原生 Coding Agent 的工程化架构与实战落地
  • 保姆级教程:windows和linux双系统的电脑如何无副作用,安全删除linux
  • SSM宠物领养平台16e63(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 大前端系统课教程(视频教程)
  • Bulutistan:融合本地与云端,借 Azure Arc 开启创新之旅
  • 北极象沉浸式翻译 - 沉浸式翻译 | 免费翻译 | PDF翻译
  • C++编码
  • WKT、WKB和GeoJson
  • 【开题答辩全过程】以 基于大数据的混合音乐推荐系统为例,包含答辩的问题和答案
  • 【complex system science 4 precision medicine】
  • (4) Tauri调试
  • destr错误
  • 数据定义:数字化控制系统技术分析-2
  • pyhon接口自动化的一些编码规范
  • SimLab Composer下载与安装教程(附安装包)2025最新版详细图文安装教程
  • 一些知识点的复习
  • CTFHub 文件上传-MIME
  • 用什么样的审批标准和流程安全又高效?
  • 人工智能驱动知识管理:应用价值与最佳实践场景解析
  • SSM滁州学院考研信息分享论坛0iaj2 (程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • [OpenGL]简单几何类设计
  • 堆排序的应用
  • python13——异常处理
  • AXI_CAN IP 简单使用。(仿真、microblaze)
  • zabbix-mcp-server:使用自然语言操作Zabbix
  • 【Makefile】Linux内核模块编译
  • Qt 系统相关 - 音视频
  • Go基础:Go语言中的指针详解:在什么情况下应该使用指针?
  • ReactNative性能优化实践方案