You need to enable JavaScript to run this app. Python生成关联CRUD信息的条形码 实现EAN码绑定数据模态框展示
优惠活动
大模型
产品
解决方案
定价
更多

Python生成关联CRUD信息的条形码 实现EAN码绑定数据模态框展示

实现业务数据与EAN码绑定+扫描模态框展示的全流程方案

1. 调整数据模型完成EAN码与业务数据绑定

直接在你现有施工人员的Django模型中新增EAN码存储字段,建立唯一关联:

# 原有施工人员模型仅需新增ean_code字段
from django.db import models

class ConstructionStaff(models.Model):
    # 原有字段全部保留(身份证号、姓名、所属班组、资质状态等)
    id_card = models.CharField(max_length=18, unique=True, verbose_name="身份证号")
    name = models.CharField(max_length=20, verbose_name="姓名")
    team = models.CharField(max_length=50, verbose_name="所属班组")
    qualification_valid = models.BooleanField(default=True, verbose_name="资质是否有效")
    # 新增EAN码字段,加唯一约束避免重复绑定,加索引提升查询速度
    ean_code = models.CharField(max_length=13, unique=True, db_index=True, null=True, blank=True, verbose_name="绑定EAN码")
    create_time = models.DateTimeField(auto_now_add=True)

修改完成后执行数据库迁移命令生效:
python manage.py makemigrations
python manage.py migrate

绑定逻辑可二选一:

  • 预批量生成EAN码打印成标签,人员进场登记时直接扫码将EAN值写入对应人员的ean_code字段
  • 人员登记完成后生成对应EAN码,绑定后打印下发,可借助python-barcode库生成合规EAN码,安装命令:pip install python-barcode
    生成+绑定EAN码示例代码:
from barcode import EAN13
from barcode.writer import ImageWriter
import random

# 生成全局唯一的13位EAN码
def generate_unique_ean():
    while True:
        # 前12位自定义生成,最后1位校验位EAN库自动计算
        ean_num = ''.join([str(random.randint(0,9)) for _ in range(12)])
        if not ConstructionStaff.objects.filter(ean_code=ean_num).exists():
            return ean_num

# 绑定到指定人员
staff = ConstructionStaff.objects.get(id_card="待绑定人员身份证号")
staff.ean_code = generate_unique_ean()
staff.save()
# 生成EAN码图片用于打印下发
with open(f"{staff.ean_code}.png", "wb") as f:
    EAN13(staff.ean_code, writer=ImageWriter()).write(f)

2. 开发EAN码查询接口

前端扫码后调用该接口返回关联的人员信息,普通Django视图示例:

from django.http import JsonResponse

def query_staff_by_ean(request):
    ean_code = request.GET.get("ean_code")
    if not ean_code:
        return JsonResponse({"code": 400, "msg": "EAN码为空"}, status=400)
    try:
        staff = ConstructionStaff.objects.get(ean_code=ean_code)
        # 返回需要展示在模态框的所有字段
        data = {
            "name": staff.name,
            "id_card": staff.id_card,
            "team": staff.team,
            "qualification_valid": staff.qualification_valid,
            "entry_count": staff.entryrecord_set.count() # 关联的进场记录等扩展字段也可一并返回
        }
        return JsonResponse({"code": 200, "data": data})
    except ConstructionStaff.DoesNotExist:
        return JsonResponse({"code": 404, "msg": "未查询到对应人员"}, status=404)

写完后在urls.py中配置对应路由即可。

3. 前端实现扫码+模态框展示逻辑

可借助h5-qrcode库实现网页端扫码,扫到EAN码后调用接口,拿到数据填充到模态框弹出展示,核心逻辑示例:

// 扫码成功回调
function onScanSuccess(decodedText) {
    // decodedText即为扫描得到的EAN码值
    fetch(`/api/query_staff_by_ean?ean_code=${decodedText}`)
    .then(res => res.json())
    .then(res => {
        if(res.code === 200) {
            const info = res.data
            // 把数据填充到模态框对应节点
            document.getElementById("modal-name").innerText = info.name
            document.getElementById("modal-id-card").innerText = info.id_card
            document.getElementById("modal-team").innerText = info.team
            document.getElementById("modal-qual").innerText = info.qualification_valid ? "有效" : "无效"
            // 弹出模态框,可使用Bootstrap/Element UI等任意框架的模态框组件
            const staffModal = new bootstrap.Modal(document.getElementById('staffInfoModal'))
            staffModal.show()
        } else {
            alert(res.msg)
        }
    })
}
// 初始化扫码器,调用后置摄像头
const html5QrCode = new Html5Qrcode("qr-reader");
html5QrCode.start(
  { facingMode: "environment" },
  { fps: 10, qrbox: { width: 250, height: 250 } },
  onScanSuccess
);

注意事项

  • 双重核验逻辑可在接口中补充,先校验人员身份证核验状态,再返回EAN关联信息,匹配你的业务需求
  • EAN码生成时直接用成熟库即可,无需自己计算校验位,避免生成不符合规范的码无法被普通扫码设备识别

内容的提问来源于stack exchange,提问作者Mario Chico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 05:45:04