ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

基于Python+Django的食品安全追溯系统

基于Python+Django的食品安全追溯系统

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

1. 项目背景与意义

随着人们生活水平的不断提高,食品安全问题日益受到社会各界的广泛关注。近年来,食品安全事件频发,暴露出传统食品供应链在信息透明度、监管效率和责任追溯等方面存在的诸多短板。如何实现食品从生产、加工、流通到销售全链条的精准追溯,成为行业亟待解决的核心问题。

本系统基于 Python 和 Django 框架,构建一套食品安全追溯管理平台,通过统一编码、全流程记录和可视化查询,帮助企业和监管部门快速定位问题环节、及时召回问题产品,从而提升食品安全的整体保障水平。

2. 系统需求分析

2.1 功能需求

  • 用户管理:支持企业用户、监管用户和管理员三类角色,提供注册、登录、权限分配等功能。
  • 产品管理:对食品品类、批次、规格、保质期等基础信息进行统一维护。
  • 溯源信息录入:覆盖生产、加工、仓储、运输、销售等环节的关键数据采集。
  • 追溯查询:通过溯源码或产品名称,快速查询食品全生命周期信息。
  • 预警与召回:对异常批次自动预警,支持问题产品的召回流程管理。
  • 数据统计:提供溯源覆盖率、问题批次分布等统计报表。

2.2 非功能需求

  • 安全性:用户密码加密存储,接口权限校验,防止越权访问。
  • 可靠性:关键操作记录日志,支持数据定期备份。
  • 可扩展性:模块化设计,便于后续接入物联网设备或第三方监管平台。
  • 易用性:界面简洁清晰,操作流程符合业务人员使用习惯。

3. 系统架构设计

3.1 技术选型

层次技术方案
前端HTML、CSS、JavaScript、Bootstrap
后端框架Python 3.8+、Django 3.2
数据库MySQL 5.7 / SQLite(开发环境)
缓存Redis(可选,用于验证码和会话管理)
部署Nginx + Gunicorn

3.2 整体架构

系统采用经典的 Django MTV 架构,浏览器通过 HTTP 请求访问视图层,视图调用模型层完成数据读写,模板引擎负责页面渲染。业务逻辑按应用模块划分,包括用户模块、产品模块、溯源模块、预警模块和统计模块,各模块之间通过清晰的接口协作。

flowchart TD A[浏览器客户端] --> B[Nginx 反向代理] B --> C[Gunicorn WSGI 服务] C --> D[Django 应用] D --> E[用户模块] D --> F[产品模块] D --> G[溯源模块] D --> H[预警模块] D --> I[统计模块] E --> J[(MySQL 数据库)] F --> J G --> J H --> J I --> J

4. 数据库设计

4.1 核心数据表

表名说明主要字段
User用户表username、password、role、company
Product产品表name、category、spec、shelf_life
Batch批次表batch_no、product、produce_date、status
TraceNode溯源节点表batch、node_type、operator、time、location、detail
Warning预警表batch、level、content、create_time、status

4.2 关键模型示例

from django.db import models class Product(models.Model): name = models.CharField(max_length=100, verbose_name="产品名称") category = models.CharField(max_length=50, verbose_name="产品类别") spec = models.CharField(max_length=50, verbose_name="规格") shelf_life = models.IntegerField(verbose_name="保质期(天)") class Meta: db_table = "product" def __str__(self): return self.name class TraceNode(models.Model): NODE_TYPES = ( ("produce", "生产"), ("process", "加工"), ("storage", "仓储"), ("transport", "运输"), ("sale", "销售"), ) batch = models.ForeignKey("Batch", on_delete=models.CASCADE, verbose_name="所属批次") node_type = models.CharField(max_length=20, choices=NODE_TYPES, verbose_name="环节类型") operator = models.CharField(max_length=50, verbose_name="操作人") time = models.DateTimeField(auto_now_add=True, verbose_name="操作时间") location = models.CharField(max_length=200, verbose_name="操作地点") detail = models.TextField(verbose_name="详细信息") class Meta: db_table = "trace_node" def __str__(self): return f"{self.batch} - {self.get_node_type_display()}"

5. 核心功能实现

5.1 用户认证与权限控制

系统基于 Django 内置的认证体系进行扩展,通过自定义用户模型和装饰器实现角色权限控制。管理员可以管理全部数据,企业用户只能维护本企业的产品和批次,监管用户拥有查询和预警处理权限。

from django.contrib.auth.decorators import login_required from django.shortcuts import render @login_required def batch_list(request): """批次列表:企业用户仅查看本企业数据""" if request.user.role == "enterprise": batches = Batch.objects.filter(company=request.user.company) else: batches = Batch.objects.all() return render(request, "trace/batch_list.html", {"batches": batches})

5.2 溯源信息录入

溯源信息录入是系统的核心环节。每个批次从生产开始,依次经过加工、仓储、运输和销售等节点,每个节点由操作人员录入关键信息,形成完整的溯源链条。

def add_trace_node(request, batch_id): batch = get_object_or_404(Batch, id=batch_id) if request.method == "POST": form = TraceNodeForm(request.POST) if form.is_valid(): node = form.save(commit=False) node.batch = batch node.save() return redirect("trace_detail", batch_id=batch.id) else: form = TraceNodeForm() return render(request, "trace/add_node.html", {"form": form, "batch": batch})

5.3 追溯查询

消费者或监管人员输入溯源码后,系统按时间顺序展示该批次从生产到销售的全部节点信息,并以时间线的形式直观呈现。

def trace_query(request): code = request.GET.get("code", "") if code: try: batch = Batch.objects.get(batch_no=code) nodes = batch.tracenode_set.order_by("time") return render(request, "trace/trace_result.html", {"batch": batch, "nodes": nodes}) except Batch.DoesNotExist: return render(request, "trace/trace_result.html", {"error": "未查询到该溯源码对应的批次"}) return render(request, "trace/trace_query.html")

5.4 异常预警与召回

系统对录入的溯源数据进行自动校验,当检测到批次超过保质期、运输温度异常或检测指标不合格等情况时,自动生成预警记录并通知相关责任人,支持一键发起召回流程。

def check_batch_warning(batch): """检查批次是否存在异常,生成预警""" from datetime import date from django.utils import timezone warnings = [] if batch.produce_date and batch.product.shelf_life: expire_date = batch.produce_date + timedelta(days=batch.product.shelf_life) if expire_date < date.today(): warnings.append("该批次已超过保质期") # 其他校验逻辑省略 for content in warnings: Warning.objects.create(batch=batch, level="high", content=content) return warnings

6. 系统测试

6.1 测试环境

测试在本地开发环境完成,操作系统为 Windows 10,Python 版本 3.9,Django 版本 3.2,数据库使用 SQLite。测试覆盖用户登录、产品管理、溯源录入、追溯查询和预警处理等核心功能模块。

6.2 测试用例示例

编号测试项操作步骤预期结果实际结果
TC-01用户登录输入正确用户名和密码登录成功并跳转首页通过
TC-02权限控制企业用户访问监管接口提示无权限通过
TC-03溯源录入为批次添加运输节点节点保存成功并展示通过
TC-04追溯查询输入有效溯源码展示完整溯源链路通过
TC-05过期预警录入已过期批次自动生成预警记录通过

7. 总结与展望

本文设计并实现了一个基于 Python 和 Django 的食品安全追溯系统,覆盖了用户管理、产品管理、溯源信息录入、追溯查询、异常预警和召回管理等核心功能。系统采用模块化设计,结构清晰,易于扩展,能够满足中小型食品企业和监管部门的基本追溯需求。

在后续的迭代中,可以从以下几个方面继续优化:一是引入区块链技术,增强溯源数据的不可篡改性;二是对接物联网设备,实现温湿度等环境数据的自动采集;三是完善数据分析能力,为监管部门提供更智能的风险预测和决策支持。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进