【python】Python基于Flask超市管理系统(源码+数据库+运行方法)【独一无二】
本文介绍了一套超市后台管理系统API服务的设计与实现,涵盖用户权限、商品管理、订单处理、采购入库和库存监控等核心业务模块。系统采用分层架构,包含用户登录鉴权(MD5加密)、商品信息维护、订单全流程管理、采购记录追踪和库存实时查询等功能,支持数据分页展示和模糊搜索。通过Flask框架实现RESTful API接口,结合数据库操作完成业务逻辑,为超市运营提供信息化管理支持,有效提升工作效率和业务透明度
设计要求
本项目旨在为超市日常运营提供一套高效、清晰、易拓展的后台管理API服务。系统实现涵盖了商品、订单、采购、库存、用户等关键业务线,能够辅助管理超市商品的销售、采购、库存监控、人员权限等,实现信息化与自动化管理,提升整体经营效率。
主要业务模块与功能
1. 用户与权限管理
支持用户注册、登录/注销、个人信息管理
登录信息加密存储(MD5),会话方式鉴权
用户信息分页浏览、增删改查
2. 商品管理
商品资料录入、编辑、删除、详情展示
支持商品按名称模糊搜索及分页
商品基础信息包括品牌、价格、单位和库存
3. 订单管理
实现订单新建、查阅、修改、删除
订单与用户、商品关联,可进行分页查询
支持订单状态、数量等参数的变更
4. 采购管理
采购入库单的创建、查询、维护
记录采购来源、数量、金额、供应商信息
便于进货流程追踪和库存变动统计
5. 库存管理
库存数量的实时查询与修改
库存信息增删改查,支持分页
可按商品快速查询对应的库存
6. 通用与工具
密码加密(MD5)
分页工具(通用型,可二次开发复用)
功能展示
1)登录页面
2)商品信息列表
3)进货信息列表
4)库存信息列表
5)订单信息列表
代码分析
一、用户与权限管理模块
设计思路
- 采用Model-Controller分层,
User
类负责数据库操作,控制器负责接口和会话管理。 - 登录使用MD5对密码进行加密,安全性提升。
- 会话使用
session
存储,所有敏感信息(如个人信息修改)都需登录后(session中有user_id
)才能访问。 - 用户支持分页、增删查改接口。
代码示例
models/user.py
import pyodbc
from config import DB_CONNECTION_STRING
class User:
def __init__(self, id=None, username="", password="", email="", role=""):
self.id = id
self.username = username
self.password = password
self.email = email
self.role = role
@staticmethod
def get_by_username(username):
with pyodbc.connect(DB_CONNECTION_STRING) as conn:
cursor = conn.cursor()
cursor.execute("SELECT id, username, password, email, role FROM users WHERE username=?", (username,))
row = cursor.fetchone()
if row:
return User(*row)
return None
# 此处略去至少50行代码...
controllers/auth.py
from flask import Blueprint, request, jsonify, session
from models.user import User
from utils.md5_util import md5_encrypt
bp_auth = Blueprint('auth', __name__)
@bp_auth.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data.get('username', '').strip()
password = data.get('password', '').strip()
if not username or not password:
return jsonify({'code': 400, 'msg': '用户名和密码不能为空!'}), 400
# 此处略去至少50行代码...
商品管理模块
设计思路
- 商品信息以Product类为主进行数据库操作。
- 支持模糊查询、分页、增删改查。
- 控制器负责接收请求参数、校验、调用model、返回json。
代码示例
models/product.py
import pyodbc
from config import DB_CONNECTION_STRING
class Product:
def __init__(self, id=None, name="", brand="", price=0.0, unit="", stock=0):
self.id = id
self.name = name
self.brand = brand
self.price = price
self.unit = unit
self.stock = stock
# 此处略去至少50行代码...
controllers/product.py
from flask import Blueprint, request, jsonify
from models.product import Product
bp_product = Blueprint('product', __name__)
@bp_product.route('/products', methods=['GET'])
def list_products():
# /products?page=1&page_size=10
page = int(request.args.get('page', 1))
page_size = int(request.args.get('page_size', 10))
# 此处略去至少50行代码...
订单管理模块
设计思路
- Order负责订单业务,包括下单、查单、订单分页查询、修改、删除。
- 订单表与用户、商品存在外键关联。
代码示例
models/order.py
import pyodbc
from config import DB_CONNECTION_STRING
class Order:
def __init__(self, id=None, user_id=None, product_id=None, quantity=0, price=0.0, order_date=None, status=""):
self.id = id
self.user_id = user_id
self.product_id = product_id
# 此处略去至少50行代码...
controllers/order.py
from flask import Blueprint, request, jsonify
from models.order import Order
bp_order = Blueprint('order', __name__)
@bp_order.route('/orders', methods=['GET'])
def list_orders():
page = int(request.args.get('page', 1))
page_size = int(request.args.get('page_size', 10))
orders, total = Order.list_all(page, page_size)
# 此处略去至少50行代码...
进货管理模块
设计思路
- Purchase用于进货管理,能追溯商品采购来源和数量。
- 提供分页查询、详情、增删查改接口。
代码示例
models/purchase.py
import pyodbc
from config import DB_CONNECTION_STRING
class Purchase:
def __init__(self, id=None, product_id=None, quantity=0, price=0.0, supplier="", purchase_date=None):
self.id = id
self.product_id = product_id
# 此处略去至少50行代码...
controllers/purchase.py
from flask import Blueprint, request, jsonify
from models.purchase import Purchase
bp_purchase = Blueprint('purchase', __name__)
@bp_purchase.route('/purchases', methods=['GET'])
def list_purchases():
page = int(request.args.get('page', 1))
page_size = int(request.args.get('page_size', 10))
# 此处略去至少50行代码...
库存管理模块
设计思路
- Stock表用于实时反映商品剩余量、更新时间。
- 支持分页查询、增删查改。
代码示例
models/stock.py
import pyodbc
from config import DB_CONNECTION_STRING
class Stock:
def __init__(self, id=None, product_id=None, quantity=0, last_update=None):
self.id = id
# 此处略去至少50行代码...
controllers/stock.py
from flask import Blueprint, request, jsonify
from models.stock import Stock
bp_stock = Blueprint('stock', __name__)
@bp_stock.route('/stocks', methods=['GET'])
def list_stocks():
page = int(request.args.get('page', 1))
# 此处略去至少50行代码...
工具模块
设计思路
- md5_util.py 对用户密码等敏感信息进行加密。
- pagination.py 提供数据分页的通用实现。
代码示例
utils/md5_util.py
import hashlib
def md5_encrypt(text):
m = hashlib.md5()
m.update(str(text).encode('utf-8'))
return m.hexdigest()
utils/pagination.py
def paginate(items, page, page_size):
start = (page - 1) * page_size
end = start + page_size
return items[start:end]
主入口程序及路由分发
设计思路
app.py
负责总体初始化、配置及蓝图注册,维持项目结构清晰。- 所有蓝图接口统一加
/api
前缀,便于后续权限中间件扩展、接口管理。
代码示例
app.py
from flask import Flask
from flask_cors import CORS
from config import SECRET_KEY
from controllers.auth import bp_auth
from controllers.profile import bp_profile
from controllers.product import bp_product
from controllers.purchase import bp_purchase
from controllers.stock import bp_stock
from controllers.order import bp_order
# 此处略去至少50行代码...

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)