
1. 项目概述基于DjangoVue3的便利店商品管理系统去年接手了一个连锁便利店的数字化改造项目客户需要一套既能管理线下门店商品库存又能支持线上购物的全渠道系统。经过技术选型我们最终采用了DjangoVue3的前后端分离架构6个月开发周期内完成了日均5000订单量级的系统搭建。这个方案最大的优势在于用Django快速构建稳定的商品管理后台配合Vue3的灵活前端实现了线下收银与线上商城的无缝衔接。关键数据指标系统上线后门店库存周转率提升37%线上订单占比达到总销售额的42%顾客复购率提高28%2. 技术架构设计2.1 为什么选择DjangoVue3组合在技术选型阶段我们对比了三种方案传统单体架构Django模板渲染优点开发简单缺点前后端耦合难以应对多终端适配Java微服务架构SpringCloudReact优点高并发能力强缺点开发周期长人力成本高Python分离架构DjangoVue3折中方案既保持Python开发效率又具备前后端分离的扩展性最终选择方案3的核心考量便利店业务逻辑复杂度中等Python完全能胜任Vue3的Composition API更适合商品类目频繁变更的场景Django Admin可快速搭建商品管理后台2.2 系统分层架构graph TD A[客户端] -- B[Nginx] B -- C[Vue3前端] B -- D[Django API] D -- E[MySQL] D -- F[Redis] C -- D实际部署时我们做了优化静态文件走CDN加速API服务用GunicornGeventRedis缓存热点商品数据3. 核心模块实现3.1 商品管理模块数据库设计要点class Product(models.Model): barcode models.CharField(max_length20, uniqueTrue) # 国际条码 name models.CharField(max_length100) category models.ForeignKey(Category, on_deletemodels.PROTECT) price models.DecimalField(max_digits8, decimal_places2) cost models.DecimalField(max_digits8, decimal_places2) # 进货价 alert_stock models.IntegerField() # 库存预警值 is_active models.BooleanField(defaultTrue) class Meta: indexes [ models.Index(fields[barcode]), models.Index(fields[category]), ]批量导入优化技巧使用django-import-export库处理Excel开启事务保证数据一致性异步任务处理图片上传# 示例使用celery处理商品图片 app.task def process_product_image(product_id, image_url): product Product.objects.get(pkproduct_id) img_temp NamedTemporaryFile(deleteTrue) img_temp.write(requests.get(image_url).content) img_temp.flush() product.image.save(f{product.barcode}.jpg, File(img_temp))3.2 库存管理方案我们实现了三级库存机制总仓库存MySQL持久化存储门店缓存Redis实时同步前端本地缓存Vuex存储关键同步逻辑# signals.py receiver(post_save, senderInventory) def update_redis_cache(sender, instance, **kwargs): redis_client.hset( fstore:{instance.store.id}, fproduct:{instance.product.id}, instance.quantity )4. 订单系统设计4.1 状态机设计class Order(models.Model): STATUS_CHOICES [ (pending, 待支付), (paid, 已支付), (shipped, 已发货), (completed, 已完成), (cancelled, 已取消) ] transition(fieldstatus, sourcepending, targetpaid) def make_payment(self): # 支付逻辑 pass transition(fieldstatus, sourcepaid, targetcancelled) def cancel_order(self): # 库存回滚逻辑 Inventory.objects.filter( product__inself.items.all(), storeself.store ).update(quantityF(quantity) 1)4.2 支付对接踩坑记录微信支付证书问题开发环境用沙箱模式生产环境证书需要放在非web目录支付宝异步通知一定要验证sign和out_trade_no处理幂等问题用redis记录已处理订单5. 性能优化实践5.1 数据库优化给高频查询字段加索引使用select_related/prefetch_related分库分表策略按店铺ID分片历史订单归档5.2 前端性能提升商品列表虚拟滚动图片懒加载WebP格式图片压缩// Vue3实现图片懒加载 const lazyLoad (el) { const observer new IntersectionObserver((entries) { entries.forEach(entry { if (entry.isIntersecting) { el.src el.dataset.src observer.unobserve(el) } }) }) observer.observe(el) }6. 安全防护措施JWT安全增强设置合理过期时间建议2小时使用httponlysecure的refresh token防SQL注入永远用ORM或参数化查询禁用eval/execXSS防护前端用v-html替代innerHTMLDjango模板自动转义7. 部署方案7.1 服务器配置# 生产环境示例 # django服务 gunicorn core.wsgi:application -w 4 -k gevent -b 0.0.0.0:8000 # celery worker celery -A core worker -l info -P gevent -c 1007.2 监控告警Prometheus监控API响应时间数据库连接池状态关键业务指标库存预警支付失败率8. 项目复盘心得技术选型验证Vue3的setup语法确实提升开发效率Django ORM在复杂查询时略显吃力后来用raw SQL补充团队协作建议一定要定义清晰的API文档规范前后端并行开发时用Mock数据最值得投资的三个优化Redis缓存设计支付模块的单元测试自动化部署流程这个项目让我深刻体会到中台系统的核心不在于技术多先进而在于对业务场景的深度理解。比如我们为便利店特别设计的临期商品自动促销功能就是基于店长们的实际痛点开发的。技术永远是为业务服务的工具找准痛点比堆砌技术更重要。