在线问卷调研系统 · JSON 动态表单与条件跳转 预览图

在线问卷调研系统 · JSON 动态表单与条件跳转

单选多选填空评分四种题型全由 JSON 结构驱动,可视化出题、条件跳转、防刷与实时统计

源码/项目包 v1.0 # Python# Django# Web全栈

这个项目解决什么问题

传统做法里,每新增一种题型就要改表结构、改页面、改统计逻辑,三处联动苦不堪言。本项目的解法是:题目以 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。

许可:个人使用,可用于自己的学习、课程实验与研究报告,请勿转售或公开传播。

Django 4
SQLite
openpyxl
ECharts
Bootstrap 5

环境与步骤

pip install -r requirements.txt
pip install -r requirements.txt
python manage.py migrate
python manage.py init_data   # 预置 3 个模板问卷 + 模拟答卷
python manage.py runserver

Q:题型是写死在代码里的吗?

A:不是。单选、多选、填空、评分四种题型全部由 JSON 结构驱动:编辑器点按钮出题,填写页按结构渲染。README 第七节专门讲了 Question.options 与条件跳转 jump 的数据结构。

Q:条件跳转怎么配?

A:在单选题的选项上挂跳转规则(例如选 A 跳到第 5 题),填写时按规则跳题,无关题目不再干扰作答。

Q:防刷是怎么做的?

A:Cookie + IP 双重判定:任一命中即视为已提交,第二次填写会被提示“您已填写过本问卷,请勿重复提交”;答案的合法性与必填在服务端校验,不依赖前端。

Q:结果能导出吗?

A:能。填写页实时统计(进度、时长、各题分布),答卷可按问卷导出成 xlsx(survey_export,openpyxl 生成)。

购买评价(0)

暂无评价,购买后第一个来评价吧
相关商品
🍪 隐私提示 我们仅收集提供服务所必需的信息(详见《隐私政策》),不出售、不追踪。
¥109
立即购买