You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django栈中如何在不终止请求时获取用户输入处理数据冲突

解决Django+Vue上传Excel冲突时的用户交互问题

最优方案:异步处理+会话式交互

这种模式既不用中断初始解析流程,也能在检测到冲突时触发用户选择,同时避免无效预询问:

步骤1:服务器端先完成解析与冲突检测

  • Django接收Vue上传的Excel文件后,直接调用解析器提取所有样本数据,同步比对数据库中已存在的样本ID
  • 无冲突时:直接执行数据写入,返回处理结果和异常信息
  • 有冲突时:
    • 将已解析的完整数据(含冲突标记)存入临时存储(如Redis,设置15分钟过期),生成唯一session_key关联该数据
    • 返回206 Partial Content状态码(或自定义业务状态码),携带冲突详情(重复样本ID数量、示例)和session_key

步骤2:前端触发用户交互获取处理指令

  • 前端识别到206状态后,弹出确认框,提供三个选项:「重新加载原文件所有数据」「更新现有数据」「仅追加新数据」
  • 用户选择后,前端携带session_key和选中的处理模式(如mode=overwrite/update/append)发送新请求到Django

步骤3:服务器执行最终处理

  • 通过session_key从临时存储取出已解析数据
  • 根据处理模式执行对应逻辑:
    • overwrite:删除数据库中重复样本,写入所有新数据
    • update:用新数据覆盖重复样本字段,同时写入新样本
    • append:跳过重复样本,仅写入新数据
  • 返回最终处理结果,清理临时存储的过期数据

方案优势

  • 无无效预询问:仅在真冲突时触发用户交互,不干扰正常上传流程
  • 复用解析结果:已完成的解析数据临时保存,无需用户重新上传,节省资源
  • 流程连贯:用户在同一上传会话内完成冲突处理,体验更顺畅

关键实现细节

  • 临时存储优先选Redis,用Django Cache框架配置即可,支持自动过期清理
  • 解析数据序列化时注意处理Excel特殊格式(日期、数值),确保能完整还原
  • 若临时数据过期,前端请求时返回「会话已过期,请重新上传」,引导用户重新操作

内容的提问来源于stack exchange,提问作者Patrick Upson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:15:34