用Python+Flask打造可視化武俠人物關系圖生成器:從零到一的實戰全記錄

用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)
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:添加示例數據
# 示例人物數據
characters.extend([{"name": "張三豐", "sect": "武當派"},{"name": "宋遠橋", "sect": "武當派"},{"name": "空聞大師", "sect": "少林派"},{"name": "滅絕師太", "sect": "峨眉派"},# 可繼續添加其他人物...
])# 示例關系數據
relations.extend([{"from": "張三豐", "to": "宋遠橋", "label": "師徒"},{"from": "空聞大師", "to": "張三豐", "label": "故交"},# 添加更多關系...
])
步驟5:實現關系圖生成
@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功能
@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.pswp.cn/web/71253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71253.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

RPA 職業前景:個人職場發展的 “新機遇”

1. RPA職業定義與范疇 1.1 RPA核心概念 機器人流程自動化&#xff08;RPA&#xff09;是一種通過軟件機器人模擬人類操作&#xff0c;自動執行重復性、規則性任務的技術。RPA的核心在于其能夠高效、準確地處理大量數據和流程&#xff0c;減少人工干預&#xff0c;從而提高工作…

Full GC 排查

在 Java 中&#xff0c;Full GC&#xff08;完全垃圾回收&#xff09;會對整個堆&#xff08;包括年輕代和老年代&#xff0c;甚至可能包括永久代/元空間&#xff09;進行垃圾回收&#xff0c;通常會導致較長的停頓&#xff08;STW&#xff0c;Stop-The-World&#xff09;。如果…

go語言中字符串嵌套

在Go語言中&#xff0c;字符串嵌套通常是指在字符串中包含另一個字符串。可以通過以下幾種方式實現&#xff1a; 1. 使用雙引號和轉義字符 如果需要在字符串中嵌套雙引號&#xff0c;可以使用轉義字符 \ 來表示內部的雙引號。例如&#xff1a; s : "He said, \"He…

Docker 學習(二)——基于Registry、Harbor搭建私有倉庫

Docker倉庫是集中存儲和管理Docker鏡像的平臺&#xff0c;支持鏡像的上傳、下載、版本管理等功能。 一、Docker倉庫分類 1.公有倉庫 Docker Hub&#xff1a;官方默認公共倉庫&#xff0c;提供超過10萬鏡像&#xff0c;支持用戶上傳和管理鏡像。 第三方平臺&#xff1a;如阿里…

js的簡單介紹

一.javascript&#xff08;是什么&#xff09; 是一種運行在客戶端(瀏覽器)的編程語言&#xff0c;實現人機交互效果 作用 網頁特效&#xff08;監聽客戶的一些行為讓網頁做出對應的反饋&#xff09;表單驗證(針對表格數據的合法性進行判斷)數據交互(獲取后臺的數據&#xf…

k8s架構及服務詳解

目錄 1.1.容器是什么1.2.Namespace1.3.rootfs5.1.Service介紹5.1.1.Serice簡介 5.1.1.1什么是Service5.1.1.2.Service的創建5.1.1.3.檢測服務5.1.1.4.在運行的容器中遠程執行命令 5.2.連接集群外部的服務 5.2.1.介紹服務endpoint5.2.2.手動配置服務的endpoint5.2.3.為外部服務…

01. HarmonyOS應用開發實踐與技術解析

文章目錄 前言項目概述HarmonyOS應用架構項目結構Ability生命周期 ArkTS語言特性裝飾器狀態管理 UI組件與布局基礎組件響應式布局樣式與主題 頁面路由與參數傳遞頁面跳轉參數接收 數據綁定與循環渲染數據接口定義循環渲染 條件渲染組件生命周期最佳實踐與性能優化組件復用響應式…

【虛擬機 IP 配置深度剖析】

虛擬機 IP 配置深度剖析 在虛擬機的使用過程中&#xff0c;IP 配置猶如搭建房屋的基石&#xff0c;是確保虛擬機與外部網絡順暢通信、與其他設備高效交互的關鍵所在。本文將以 CentOS 虛擬機為例&#xff0c;深入解讀 IP 配置的奧秘。 一、認識網絡模式 ? NAT 模式&#xf…

【Python 數據結構 5.棧】

目錄 一、棧的基本概念 1.棧的概念 2.入棧 入棧的步驟 3.出棧 出棧的步驟 4.獲取棧頂元素 獲取棧頂元素的步驟 二、 Python中的棧 順序表實現 鏈表實現 三、棧的實戰 1.LCR 123. 圖書整理 I 思路與算法 2.LCR 027. 回文鏈表 思路與算法 3.1614. 括號的最大嵌套深度 思路與算法 …

Machine Learning 初探

前置知識 pandas 讀取文件&#xff1a;read_csv查看信息 describe&#xff1a;查看整體信息&#xff0c;包括每列的平均值、最大最小值、標準差等head&#xff1a;輸出頭部幾行數據columns&#xff1a;輸出所有列名loc&#xff1a;查詢數據&#xff0c;或是根據索引取對應的數…

2025年2月個人工作生活總結

本文為 2025年2月工作生活總結。 工作記錄 AI浪潮 AI非常火&#xff0c;春節至今&#xff0c;到處充斥著大量和AI、DeepSeek有關的新聞。領導也一再強調要用AI&#xff0c;甚至納入到新一年的考核里。再往上&#xff0c;大領導開會的新聞稿里也作出要求&#xff0c;不能停下腳…

SpringBoot @ConfigurationProperties 注解使用

ConfigurationProperties 用于將配置文件&#xff08;如 application.properties 或 application.yml&#xff09;中的屬性批量綁定到一個 Java Bean 中。 1. 定義配置文件 在 application.properties 或 application.yml 中定義一組具有相同前綴的屬性。 application.yml &a…

剛安裝docker并啟動docker服務: systemctl restart docker報錯解決

root:/home/lzw# sudo systemctl restart docker Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xeu docker.service" for details. 1、問題描述 啟動doc…

JavaScript的this指向,一次徹底講清楚

JavaScript 中的 this 指向是一個非常重要且容易混淆的概念。它的值取決于函數被調用的上下文,而不是函數定義的位置。以下是 this 指向的詳細解析: 1. 默認綁定(Default Binding) 在非嚴格模式下,如果函數是直接調用(而不是作為對象的方法或構造函數等),this 默認指向…

MFC: 控件根據文本內容大小自動調整

背景&#xff1a; 針對不同語言下&#xff0c;控件顯示不全的現象&#xff1b; 例如&#xff1a; 現象1&#xff1a;中文下顯示全部信息&#xff0c;英語下只能顯示部分文字 現象2&#xff1a;中文下顯示不全## 實現思路&#xff1a; 控件綁定按鈕計算控件文本長度根據文本長…

SpringBoot 整合mongoDB并自定義連接池,實現多數據源配置

要想在同一個springboot項目中使用多個數據源&#xff0c;最主要是每個數據源都有自己的mongoTemplate和MongoDbFactory。mongoTemplate和MongoDbFactory是負責對數據源進行交互的并管理鏈接的。 spring提供了一個注解EnableMongoRepositories 用來注釋在某些路徑下的MongoRepo…

軟件測試中的BUG

文章目錄 軟件測試的生命周期BugBug 的概念描述 Bug 的要素案例Bug 級別Bug 的生命周期與開發產生爭執怎么辦&#xff1f;【高頻面試題】先檢查自身&#xff0c;Bug 是否描述的不清楚站在用戶角度考慮并拋出問題Bug 的定級要有理有據提?自身技術和業務水平&#xff0c;做到不僅…

泵吸式激光可燃氣體監測儀:快速精準守護燃氣管網安全

在城市化進程加速的今天&#xff0c;燃氣泄漏、地下管網老化等問題時刻威脅著城市安全。如何實現精準、高效的可燃氣體監測&#xff0c;守護“城市生命線”&#xff0c;成為新型基礎設施建設的核心課題。泵吸式激光可燃氣體監測儀&#xff0c;以創新科技賦能安全監測&#xff0…

第J3-1周:DenseNet算法 實現乳腺癌識別

文章目錄 一、前言二、前期準備1.設置GPU2.劃分數據集 三、搭建網絡模型1.DenseLayer模塊2.DenseBlock模塊3.Transition模塊4.構建DenseNet5.構建densenet121 四、訓練模型1.編寫訓練函數2.編寫測試函數3.正式訓練 五、結果可視化1.Loss與Accuracy圖2.模型評估 總結&#xff1a…

【JAVA面試題】== 和 equals() 的區別與使用場景

在 Java 面試中&#xff0c; 和 equals() 的區別是一個高頻考點。理解它們的底層原理和使用場景&#xff0c;對于掌握 Java 基礎知識至關重要。本文將從 基本概念、底層實現 和 實際應用 三個方面&#xff0c;深入解析 和 equals() 的區別。 1. 基本概念 1.1 運算符 作用&a…