用Python+Flask打造可视化武侠人物关系图生成器:从零到一的实战全记录

devtools/2025/3/4 12:37:44/

用Python+Flask打造可视化武侠人物关系图生成器:从零到一的实战全记录


一、缘起:一个程序小白的奇妙探索之旅

作为一个接触Python仅13天的编程萌新,我曾以为开发一个完整的应用是遥不可及的事情。但在DeepSeek的帮助下,我竟用短短半天时间完成了一个本地化武侠人物关系图生成器的开发!这个工具不仅能批量管理门派和人物,还能自动生成关系图并导出Excel表格,整个过程充满了挑战与惊喜。

本文将完整记录我的开发过程,手把手带你用Python+Flask实现这个有趣的项目,最终效果如下:

初始界面

网页界面,可直接预览图形,导出EXCEL,下载PNG和PDF文件


二、制作思路:如何化繁为简
  1. 核心需求

    • 批量添加门派和人物
    • 可视化展示人物关系
    • 支持增删改查操作
    • 导出结构化数据
  2. 技术选型

    • Flask:轻量级Web框架,快速搭建后端服务
    • Graphviz:专业关系图绘制工具
    • openpyxl:Excel文件生成库
    • HTML+JavaScript:前端交互实现
  3. 架构设计

    提交数据
    前端界面
    Flask后端
    数据存储
    生成关系图
    导出Excel

三、准备工作:配置开发环境
  1. 基础工具

    • Python 3.8+
    • VS Code/PyCharm
    • 浏览器(推荐Chrome)
  2. 安装依赖库

    pip install flask graphviz openpyxl
    
  3. Graphviz安装

    • Windows:官网下载安装包
    • Mac:brew install graphviz
    • Linux:sudo apt-get install graphviz

四、实战开发:七步打造完整系统
步骤1:创建项目结构
📁 Novel-Relationship-Generator
├── 📁 static
│   └── 📁 output        # 存放生成图片
├── 📁 templates
│   └── index.html      # 前端页面
└── app.py              # 主程序
步骤2:编写后端核心(app.py)
python">from flask import Flask, render_template, request, jsonify, send_file
from graphviz import Digraph
import re
from openpyxl import Workbookapp = Flask(__name__)# 数据存储
characters = []
sects = ["武当派", "少林派", "峨眉派", "嵩山派"]  # 初始门派
relations = []
sect_descriptions = {"武当派": "以柔克刚的内家拳法","少林派": "天下武功出少林","峨眉派": "女子为主的武林门派","嵩山派": "五岳剑派之首"
}
char_descriptions = {}# 此处省略接口代码(与前文相同)...if __name__ == "__main__":app.run(debug=True)
步骤3:前端页面开发(templates/index.html)
<!-- 门派添加模块 -->
<form id="add-sects-form"><label>批量添加门派(支持逗号/分号/空格分隔):</label><textarea name="sects" rows="3" placeholder="示例:华山派,日月神教"></textarea><button type="submit">添加门派</button>
</form><!-- 人物关系展示区 -->
<div class="right-panel"><h2>武林门派谱</h2><div id="characters-list"><!-- 动态加载门派及人物 --></div>
</div>
步骤4:添加示例数据
python"># 示例人物数据
characters.extend([{"name": "张三丰", "sect": "武当派"},{"name": "宋远桥", "sect": "武当派"},{"name": "空闻大师", "sect": "少林派"},{"name": "灭绝师太", "sect": "峨眉派"},# 可继续添加其他人物...
])# 示例关系数据
relations.extend([{"from": "张三丰", "to": "宋远桥", "label": "师徒"},{"from": "空闻大师", "to": "张三丰", "label": "故交"},# 添加更多关系...
])
步骤5:实现关系图生成
python">@app.route("/generate_graph", methods=["POST"])
def generate_graph():dot = Digraph(comment="武林关系图")dot.attr(rankdir="LR", nodesep="0.3")# 添加门派分组for sect in sects:with dot.subgraph(name=f"cluster_{sect}") as sub:sub.attr(label=sect, style="filled", color="lightgrey")for char in characters:if char["sect"] == sect:sub.node(char["name"], shape="box")# 绘制关系线for rel in relations:dot.edge(rel["from"], rel["to"], label=rel["label"])dot.render("static/output/relationship.gv", format="png")return jsonify({"status": "success"})
步骤6:导出Excel功能
python">@app.route("/export_excel")
def export_excel():wb = Workbook()ws = wb.activews.append(["序号", "门派", "门派简介", "人物", "人物简介"])row_num = 1for sect in sects:desc = sect_descriptions.get(sect, "")members = [c for c in characters if c["sect"] == sect]for i, char in enumerate(members):char_desc = char_descriptions.get(char["name"], "")if i == 0:ws.append([row_num, sect, desc, char["name"], char_desc])else:ws.append([row_num, sect, "", char["name"], char_desc])row_num += 1wb.save("武林人物表.xlsx")return send_file("武林人物表.xlsx")
步骤7:运行与测试
python app.py

访问 http://localhost:5000 即可体验完整功能


五、项目亮点总结
  1. 便捷操作

    • 批量导入/导出功能节省时间
    • 实时可视化反馈
  2. 技术融合

    • 前后端分离架构
    • 多格式输出支持(PNG/PDF/Excel)
  3. 扩展性强

    • 支持自定义样式
    • 易于添加新功能模块

六、心得体会:新手的编程启示
  1. 小步快跑:从简单功能入手,逐步迭代完善
  2. 善用工具:Graphviz等成熟库能大幅提升效率
  3. 调试技巧
    • 使用浏览器开发者工具查看网络请求
    • 添加print语句追踪数据流向
  4. 文档价值
    • Flask官方文档
    • Graphviz语法指南

给读者的建议:不要被复杂的功能吓倒,把大问题拆解成小模块逐个击破。就像搭建乐高积木一样,把每个Python功能模块看作一块积木,最终就能拼出完整的作品!


立即动手尝试吧! 基于这个项目还可以拓展思路,比如把做一个日常工作管理的页面等,所以马上行动起来把,你的世界正等待被创造~ 🎉
目前刚开始学编程,并试着在CSDN发表文章,如果需要完整代码,可以在评论区留言并私信我。


http://www.ppmy.cn/devtools/164454.html

相关文章

Linux总结

1 用户与用户组管理 1.1 用户与用户组 //linux用户和用户组 Linux系统是一个多用户多任务的分时操作系统 使用系统资源的用户需要账号进入系统 账号是用户在系统上的标识&#xff0c;系统根据该标识分配不同的权限和资源 一个账号包含用户和用户组 //用户分类 超级管理员 UID…

机器学习基础概念详解:从入门到应用

在机器学习领域&#xff0c;掌握基础概念是理解复杂模型和应用场景的关键。本文将以简洁的方式介绍机器学习的核心概念&#xff0c;帮助读者快速构建知识框架。 一、数据集的划分&#xff1a;训练集、验证集与测试集 1. 训练集&#xff08;Training Set&#xff09; 用途&…

【前端】CSS 备忘清单(超级详细!)

文章目录 入门介绍外部样式表 <link>内部样式表 <style>内联样式 style 添加 class 类!important选择器文本颜色背景字体定位动画注释Flex 布局Grid 布局变量和计数器 CSS 选择器示例组选择器链选择器属性选择器第一个子选择器无子选择器 基础组合器属性选择器用户…

Linux操作系统:基于 Linux 的智能家居系统开发与实现 —— 以 FS - MP1A 嵌入式开发板为例

基于 Linux 的智能家居系统开发与实现 —— 以 FS - MP1A 嵌入式开发板为例 摘要 &#xff1a;随着科技的飞速发展&#xff0c;智能家居系统逐渐走进人们的生活&#xff0c;为家庭生活带来便利与安全保障。本文以 FS - MP1A 嵌入式开发板为基础&#xff0c;构建了一个智能化的…

【JavaEE】线程安全

【JavaEE】线程安全 一、引出线程安全二、引发线程安全的原因三、解决线程安全问题3.1 synchronized关键字&#xff08;解决修改操作不是原子的&#xff09;3.1.1 synchronized的特性3.1.1 synchronized的使用事例 3.2 volatile 关键字&#xff08;解决内存可见性&#xff09; …

芯麦GC1277:电脑散热风扇驱动芯片的优质之选 并可替代传统的0CH477/灿瑞芯片。

在电脑散热风扇、小型电机驱动等场景中&#xff0c;驱动芯片的选型直接影响系统效率、噪音控制及长期可靠性。灿瑞的0CH477曾是市场主流方案&#xff0c;但随着国产芯片技术的成熟&#xff0c;芯麦半导体推出的GC1277凭借更优的驱动性能、智能化保护机制及成本优势&#xff0c;…

基于 ‌MySQL 数据库‌对三级视图(用户视图、DBA视图、内部视图)的详细解释

基于 ‌MySQL 数据库‌对三级视图&#xff08;用户视图、DBA视图、内部视图&#xff09;的详细解释&#xff0c;结合理论与实际操作说明&#xff1a; 一、三级视图核心概念 数据库的三级视图是 ANSI/SPARC 体系结构的核心思想&#xff0c;MySQL 的实现逻辑如下&#xff1a; …

【容器化】低版本docker拉取ubuntn 22.04镜像启动容器执行apt update提示 NO_PUBKEY 871920D1991BC93C

前置信息 宿主机信息 [root@localhost ~]# cat /etc/os-release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PRETTY_NAME="CentOS Linux 7 (Core)" ANSI_COLOR…