设计要求

本项目旨在为超市日常运营提供一套高效、清晰、易拓展的后台管理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行代码...

Logo

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

更多推荐