这个项目解决什么问题
传统做法里,每新增一种题型就要改表结构、改页面、改统计逻辑,三处联动苦不堪言。本项目的解法是:题目以 JSON Schema 存储,前端按结构动态渲染——新增题型零改表,新增问卷零开发。这不只是一个问卷系统,更是一堂"如何用数据结构消灭重复开发"的设计课。
核心亮点
- JSON Schema 动态表单:单选、多选、填空、评分四种题型全部由 JSON 结构驱动,编辑器点按钮出题、填写页按结构渲染。这套建模思路(README 里有专门的设计说明)可以直接作为课程汇报的核心章节。
- 题目条件跳转:单选题可配置"选 A 跳到第 N 题",跳转规则同样存 JSON。做过的人都知道,跳转逻辑和动态渲染叠在一起时,边界条件有多磨人——也正因如此,讲出来才有分量。
- 实时统计:10 秒轮询刷新 + ECharts 自动按题型出图,问卷一发布,答卷一进来,图表自己长出来。
- 数据质量标记:填写时长少于 3 秒的答卷自动标记"疑似无效",统计页一键过滤。认真对待数据质量,是这个项目比"只管收集"的同类作品成熟的地方。
- 防刷策略:Cookie + IP 双重限制,同一份问卷不重复提交——防得住手动连点,思路也讲得清楚。
- 开箱即用:
init_data预置 3 个模板问卷和模拟答卷,外加答卷一键导出 Excel,演示与交付两头都省心。
效果预览
问卷填写页——完成进度条、单选/多选题目卡片,填起来像那么回事:

统计页——实时刷新徽章、有效答卷与疑似无效答卷分列、过滤开关与导出按钮齐备:

问卷编辑器——单选/多选/填空/评分四种题型一键添加:

你将学到
- 动态表单的设计与 JSON 建模——这是本项目最有含金量的部分
- UUID 外链:问卷填写链接为什么用 UUID 而不是自增 ID
- 防刷策略的取舍:Cookie、IP 各防什么,组合起来防什么
- 统计聚合:按题型分别聚合结果并自动匹配图表类型
- 低代码产品思维:当"配置"取代"开发",边界在哪里
适合谁
想在课程设计汇报里讲"设计深度"而非"功能数量"的学生——JSON 表单建模、条件跳转、防刷策略,每一个都是能撑起一整章的内容。难度 ★★★★,推荐给已具备 Django 基础、想在系统设计上再进一步的学习者。
交付内容:完整可运行源码、README.md(逐步运行方法与实现说明)、requirements.txt。
许可:个人使用,可用于自己的学习、课程实验与研究报告,请勿转售或公开传播。