当前位置: 首页 > news >正文

Python+Django实战|个人家庭记账理财系统:多账户管理、收支分类、日常记账、预算管控、账单检索、数据可视化、报表导出

一、项目背景与痛点

个人、家庭、自由职业者以及小型工作室的日常收支记账是普遍需求。目前主流记账方式分为纸质手写账本、本地Excel表格、第三方手机记账APP三大类,各类方式均存在明显短板,随着收支记录增多、账户变多,管理难度持续上升,核心痛点总结如下:

  • 纸质账本易丢失、统计困难:手写账单容易涂改、破损、遗失,月度/年度收支汇总完全依靠人工计算,耗时且极易出错;
  • Excel表格协同性差:本地表格无法多设备同步,家庭多人无法共用一套账本,历史账单检索、分类统计操作繁琐;
  • 第三方APP隐私与广告风险:主流记账软件充斥弹窗广告,高级统计、导出功能需要付费,个人收支数据上传第三方服务器,存在隐私泄露隐患;
  • 多账户无法统一管理现金、银行卡、微信、支付宝等多个资金账户收支分散,无法一站式汇总查看总资产;
  • 缺少预算管控机制无法提前设置月度、分类消费预算,超支后无提醒,难以做到理性理财;
  • 收支分析能力薄弱仅能记录账单,无法自动生成占比、趋势图表,不能直观分析消费结构;
  • 账单归档不便历史账单难以批量导出、离线备份,长期数据无法线下留存归档。

针对传统记账方式与商用APP的各类问题,本次基于Python+Django4.2+MySQL+ECharts+Excel导出搭建轻量化私有化记账理财系统,实现多资金账户管理、收支分类、日常记账、预算预警、账单检索、可视化分析、报表导出全套闭环能力。本项目开辟个人理财、家庭记账全新赛道,和日志、天气、智能在线考试、智能图书、访客系统、OAuth登录、进销存、租赁、考勤、驾校、兼职、二手、美食、会议室、问卷、固定资产、物业、音乐平台等所有往期项目业务、功能、代码完全无重复

二、核心目标与定位

本项目核心目标:搭建私有化无广告的Web记账平台,实现资金账户维护→收支分类配置→日常账单录入→月度/分类预算设置→超支自动提醒→多条件账单检索→收支数据可视化分析→Excel报表导出→数据备份完整闭环,替代纸质账本与第三方记账APP,实现收支数据自主管控、理财分析数字化

项目精准定位:轻量化纯Web记账系统,采用Django原生MVT架构,部署简单、服务器资源占用极低;支持个人独立使用、家庭/团队多人共用两种模式,划分普通用户、系统管理员角色,数据相互隔离;适配个人日常记账、家庭共用账本、自由职业者收支统计、小型工作室财务台账等场景,主打数据私有化、分类精细化、预算智能化、分析可视化。

核心设计理念:账户统一化、分类标准化、记账轻量化、预算预警化、分析直观化、归档便捷化,解决传统记账低效、隐私泄露、分析缺失的核心问题。


三、整体技术方案

项目基于Django原生MVT分层架构开发,MySQL存储账户、收支分类、账单、预算全量数据,datetime模块完成日期筛选与周期统计,Django ORM实现收支聚合计算,ECharts绘制饼图、柱状图、趋势图,openpyxl库实现Excel报表导出,自定义中间件完成登录与数据权限拦截。整体分层架构流程图如下:

┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 账户管理层 │────▶│ 分类配置层 │────▶│ 账单录入层 │────▶│ 预算管控层 │ │ 银行卡/微信/支付宝等账户新增维护 │ 收入/支出多级分类自定义 │ 填写金额、日期、备注记账 │ 设置月度预算、分类预算、超支判断 │ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ 账单检索层 │────▶│ 数据分析层 │────▶│ 报表导出层 │ │ 按日期/分类/账户多条件筛选账单 │ 收支占比、趋势图表可视化分析 │ 全量账单Excel离线导出归档 │ │ │ │ ▼ ┌─────────────────────────────────────────────────────────────────────────┐ │ 底层技术底座 │ │ - 后端框架:Python3.11 + Django4.2 原生MVT架构 │ │ - 数据存储:MySQL 存储账户、分类、账单、预算全业务数据 │ │ - 时间处理:datetime 完成日期筛选、月度周期计算 │ │ 数据计算:Django ORM 聚合函数统计收支总额、平均值 │ │ 数据可视化:ECharts 制作饼图、柱状图、收支趋势图 │ │ 文件导出:openpyxl 实现账单Excel报表导出与备份 │ │ 权限体系:自定义中间件,区分用户账本访问权限 │ │ 状态管控:枚举类区分收入/支出、账户启用状态 │ └─────────────────────────────────────────────────────────────────────────

完整技术栈清单

  • Web后端:Python 3.11、Django 4.2 原生MVT轻量化架构
  • 数据库:MySQL 8.0,结构化存储记账全量业务数据
  • 时间处理:datetime 模块实现日期筛选、月度周期计算
  • 数据统计:Django ORM 聚合查询完成收支总额、占比计算
  • 可视化组件:ECharts 实现各类收支分析图表
  • 文件处理:openpyxl 库生成Excel账单报表,支持导出备份
  • 权限控制:自定义中间件,拦截未登录访问、跨账本查看
  • 状态管理:枚举类区分收支类型、账户状态

四、核心能力模块详解

1. 资金账户管理模块

统一管理所有资金载体,实现多账户总资产汇总,告别账户数据分散问题:

  • 多类型账户支持:涵盖现金、储蓄卡、信用卡、微信、支付宝、理财账户等主流类型;
  • 账户基础信息:填写账户名称、初始余额、备注,支持启用/停用状态切换;
  • 总资产统计:自动汇总所有在用账户余额,实时展示个人/家庭总资产;
  • 账户筛选:可单独查看单一账户下的全部收支账单。

2. 收支分类管理模块(核心亮点)

搭建标准化收支分类体系,支持自定义适配不同使用场景:

  • 两大主分类:分为**收入类**和**支出类**两大体系,相互独立;
  • 多级子分类:收入包含工资、兼职、理财、红包等;支出包含餐饮、交通、购物、房租等;
  • 自定义编辑:管理员可新增、修改、停用分类,适配个性化记账需求;
  • 分类关联:每笔账单必须绑定对应分类,为后续统计分析提供基础。

3. 日常账单录入模块

极简录入界面,快速完成每一笔收支记录:

  • 基础录入项:选择账户、收支类型、所属分类、填写金额、交易日期;
  • 补充信息:支持填写交易备注、上传消费凭证截图;
  • 快捷操作:支持今日默认日期、常用分类快捷选择;
  • 数据校验:禁止录入负数、空金额,保证账单数据合规。

4. 预算管控与超支提醒模块

提前规划消费额度,实现智能理财管控:

  • 双重预算设置:支持设置**月度总预算**和**分类分项预算**;
  • 实时额度计算:自动统计当前月度已消费金额、剩余额度;
  • 超支提醒:消费超出预算时,页面高亮提示,起到约束作用;
  • 预算周期:按月自动重置预算额度,无需人工重复配置。

5. 多条件账单检索模块

灵活筛选历史账单,快速定位目标记录:

  • 时间筛选:支持按日、周、月、自定义时间段查询账单;
  • 维度筛选:按资金账户、收支类型、消费分类组合筛选;
  • 关键词检索:根据备注内容模糊搜索相关账单;
  • 分页展示:海量账单分页加载,页面流畅不卡顿。

6. 收支数据可视化分析模块

将枯燥的账单数据转为直观图表,清晰分析消费结构:

  • 收支占比饼图:展示各类收入、支出的占比分布,看清主要消费方向;
  • 收支对比柱状图:按月对比收入与支出总额,直观查看结余情况;
  • 趋势折线图:展示近一月/一季度收支变化趋势;
  • 数据汇总:页面展示总收入、总支出、当期结余核心指标。

7. 账单报表导出模块

实现账单离线归档,满足长期数据留存需求:

  • 全量导出:支持导出全部历史账单为标准Excel文件;
  • 筛选导出:可将检索后的指定账单单独导出;
  • 字段完整:导出内容包含账户、分类、金额、日期、备注等全字段;
  • 格式规范:Excel表头清晰,可直接打印、线下存档。

8. 账本权限模块

区分个人与共用场景,保障数据隐私安全:

  • 独立账本:单人使用时,数据完全私密,他人无法访问;
  • 家庭共享:支持添加共享成员,多人共用一套账本,权限统一管控;
  • 操作权限:普通成员仅可记账、查询,管理员可维护分类与账户;
  • 访问拦截:未登录用户禁止进入记账系统。

五、创新价值与亮点

  1. 私有化数据存储:所有收支数据留存自有服务器,不上传第三方平台,彻底解决记账隐私泄露问题;
  2. 多账户统一管理整合现金、银行卡、线上支付等全类型账户,一站式查看总资产与明细;
  3. 双重预算预警月度总预算+分类预算双重管控,超支实时提醒,辅助理性消费;
  4. 全维度可视化分析多类型图表解析收支结构,告别人工统计分析;
  5. 轻量化零广告纯Web页面无弹窗、无付费项,部署简单,长期免费使用。

六、应用前景与落地场景

  • 个人日常记账:上班族、自由职业者记录每日收支,做个人理财规划;
  • 家庭共用账本:夫妻、全家共用一套账本,统一管理家庭收支;
  • 小型工作室:微型团队记录营收、办公开销,简化简易财务台账;
  • 学生生活费管理:高校学生记录生活费收支,养成消费规划习惯;
  • 毕业设计/求职项目:个人理财类Web系统,业务场景生活化,差异化优势明显。

七、完整代码结构示例

1. 项目整体目录结构

django-account-book/├── manage.py ├── book_project/# 项目全局配置│ ├── settings.py# 数据库、Excel、权限、周期配置│ ├── urls.py# 全局路由分发│ └── middleware.py# 登录、账本权限中间件├── apps/# 模块化业务拆分│ ├── user_auth/# 用户登录、账号、共享成员模块│ ├── account_info/# 资金账户管理模块│ ├── bill_category/# 收支分类管理模块│ ├── bill_record/# 账单录入、基础管理模块│ ├── budget_set/# 预算设置、超支判断模块│ ├── bill_search/# 多条件账单检索模块│ ├── data_analysis/# 图表统计、数据分析模块│ └── excel_export/# 账单Excel导出模块├── core/# 公共工具类│ ├── time_filter.py# 日期筛选、周期计算工具│ ├── data_stat.py# 收支金额统计工具│ ├── budget_check.py# 预算超支校验工具│ └── excel_tool.py# Excel报表生成工具├── static/# 样式、ECharts、前端脚本├── templates/# 记账页、统计页、后台模板├── media/# 消费凭证图片存储├── requirements.txt# 项目依赖包└── readme.md# 部署、使用文档</pre>### 2. 核心可运行代码片段#### 示例1:账户、分类、账单、预算核心数据模型```pythonfromdjango.dbimportmodelsfromdjango.contrib.auth.models# 收支类型枚举IN_OUT_TYPE=(("income","收入"),("expend","支出"),)# 账户类型枚举ACCOUNT_TYPE=(("cash","现金"),("bank","银行卡"),("wechat","微信"),("alipay","支付宝"),("finance","理财账户"),)classBillCategory(models.Model):"""收支分类模型"""name=models.CharField(max=50,verbose_name="分类名称")cat_type=models.CharField(max=10,choices=IN_OUT_TYPE,verbose_name="收支类型")is_enable=models.BooleanField(default=True,verbose_name="是否启用")create_time=models.DateTimeField(auto_now_add=True)def__str__(self):returnself.nameclassAccountInfo(models.Model):"""资金账户模型"""user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name="所属用户")account_name=models.CharField(max=50,verbose_name="账户名称")account_type=models.CharField(max=10,choices=ACCOUNT_TYPE,verbose_name="账户类型")balance=models.DecimalField(max_digits=10,decimal_places=2,verbose_name="当前余额")is_enable=models.BooleanField(default=True,verbose_name="是否启用")create_time=models.DateTimeField(auto_now_add=True)def__str__(self):returnself.account_nameclassBillRecord(models.Model):"""账单记录模型"""user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name="记账人")account=models.ForeignKey(AccountInfo,on_delete=models.CASCADE,verbose_name="所属账户")category=models.ForeignKey(BillCategory,on_delete=models.CASCADE,verbose_name="收支分类")bill_type=models.CharField(max=10,choices=IN_OUT_TYPE,verbose_name="收支类型")amount=models.DecimalField(max_digits=10,decimal_places=2,verbose_name="金额")bill_date=models.DateField(verbose_name="交易日期")remark=models.CharField(max=200,blank=True,verbose_name="备注")voucher_img=models.ImageField(upload="voucher/",blank=True,verbose_name="消费凭证")create_time=models.DateTimeField(auto_now_add=True)classBudgetSet(models.Model):"""预算设置模型"""user=models.ForeignKey(User,on_delete=models.CASCADE,verbose_name="所属用户")category=models.ForeignKey(BillCategory,null=True,blank=True,on_delete=models.CASCADE,verbose_name="分类预算")month_budget=models.DecimalField(max_digits=10,decimal_places=2,verbose_name="月度预算金额")create_time=models.DateTimeField(auto_now_add=True)
示例2:预算超支校验工具类(core/budget_check.py)
fromdatetimeimportdatetimefromdjango.db.modelsimportSumfromapps.bill_record.modelsimportBillRecordfromapps.budget_set.modelsimportBudgetSetclassBudgetCheck:"""预算校验工具类"""@classmethoddefget_month_used(cls,user,category_id=None):"""获取当月已支出金额"""now=datetime.now()year=now.year month=now.month# 筛选当月支出账单query=BillRecord.objects.filter(user=user,bill_type="expend",bill_date__year=year,bill_date__month=month)ifcategory_id:query=query.filter(category_id=category_id)total=query.aggregate(total=Sum("amount"))["total"]or0returntotal@classmethoddefis_over_budget(cls,user,category_id=None):"""判断是否超预算"""used=cls.get_month_used(user,category_id)ifcategory_id:budget=BudgetSet.objects.filter(user=user,category_id=category_id).first()else:budget=BudgetSet.objects.filter(user=user,category__isnull=True).first()ifnotbudget:returnFalse,"未设置预算"ifused>budget.month_budget:returnTrue,f"已超预算,当月已消费:{used}元"returnFalse,f"预算正常,剩余额度:{budget.month_budget-used}元"
示例3:账单录入核心视图
fromdjango.viewsimportViewfromdjango.contrib.auth.decoratorsimportlogin_requiredfromdjango.utils.decoratorsimportmethod_decoratorfromdjango.shortcutsimportredirect,renderfromdjango.contribimportmessagesfromapps.account_info.modelsimportAccountInfofromapps.bill_category.modelsimportBillCategoryfromapps.bill_record.modelsimportBillRecord@method_decorator(login_required,name="dispatch")classBillAddView(View):defget(self,request):# 加载可用账户、分类account_list=AccountInfo.objects.filter(user=request.user,is_enable=True)cat_list=BillCategory.objects.filter(is_enable=True)returnrender(request,"bill_add.html",locals())defpost(self,request):account_id=request.POST.get("account_id")cat_id=request.POST.get("category_id")bill_type=request.POST.get("bill_type")amount=request.POST.get("amount")bill_date=request.POST.get("bill_date")remark=request.POST.get("remark")voucher=request.FILES.get("voucher_img")# 基础校验ifnotamountorfloat(amount)<=0:messages.error(request,"请输入合法金额!")returnredirect("bill_add")try:account=AccountInfo.objects.get(id=account_id,user=request.user)category=BillCategory.objects.get(id=cat_id)except(AccountInfo.DoesNotExist,BillCategory.DoesNotExist):messages.error(request,"账户或分类信息异常!")returnredirect("bill_add")# 新增账单记录BillRecord.objects.create(user=request.user,account=account,category=category,bill_type=bill_type,amount=amount,bill_date=bill_date,remark=remark,voucher_img=voucherifvoucherelseNone)messages.success(request,"账单记录保存成功!")returnredirect("bill_list")

八、总结与展望

本篇博客聚焦个人&家庭记账理财全新赛道,基于Python+Django搭建私有化Web记账系统,和日志、天气、智能在线考试、智能图书、物业、固定资产、问卷、会议室、音乐、进销存、租赁、考勤等所有往期项目完全独立。项目融合多表关联、日期周期计算、预算算法、聚合统计、ECharts可视化、Excel导出等核心技术,深度贴合个人、家庭、小型团队的日常记账理财场景,数据私有化的特性区别于主流商用APP,实用性与差异化突出。

系统覆盖账户管理、分类配置、账单录入、预算预警、检索分析、报表导出全流程,代码规范、部署简单,既适合学习Django数据统计、文件处理、周期算法等知识点,也是毕业设计、求职简历中生活化场景类优质实战项目。

后续迭代规划

  1. 新增资产变动流水,记录账户转账、存取款等资金调拨行为;
  2. 新增月度理财报告,自动生成文字版收支总结并支持下载;
  3. 接入消息提醒,预算即将用尽、账户大额消费主动推送提示;
  4. 新增数据备份与恢复功能,支持一键全量备份账单数据。

http://www.zskr.cn/news/1512449.html

相关文章:

  • 成都2026房产社区配套 “重宣传轻落地”,润达丰测如何选择配套完善的宜居社区? - 信息热点
  • 河北电焊防爆墙厂家实力排行:5家合规企业盘点 - 奔跑123
  • 网页设计没思路?5 个宝藏网站,让你作图效率翻倍
  • 闲置迪奥系列包包出手指南,无票据正品核验回收完整流程详解 - 奢侈品回收评测
  • 柯桥区原配起诉小三追回财产,律师怎么选?2026年本地实测盘点 - 边虞技术
  • AI搜索正在吃掉你的官网流量:2026年,不做GEO的品牌正在「隐身」 - 信息热点
  • 烟草财务人必看!实测实在Agent:进销存数据自动归集与月度报表生成全攻略
  • 广州线下实体回收包包 免费鉴定估价回收 LV 迪奥古驰包包 - 奢侈品回收评测
  • 2026上海大学生学车必看|零隐形消费、平价靠谱、暑假速成驾校推荐 - 信息热点
  • 国内优秀的DELTA电源分销商哪家性价比高
  • 终极指南:3种简单方法彻底卸载Windows Edge浏览器
  • Terasort 之 研究
  • 郑州 LV 出手,2026 老花行情顶格给 - 奢侈品回收评测
  • 2026年廊坊GEO优化公司推荐榜:从技术实力到服务落地的全方位评测 - 信息热点
  • 2026海南海口创业避坑!正规代理记账省钱省心 - 信息热点
  • 阿虎医考王者强训班真实体验:去年二战临床执医上岸考生的分享 - 医考机构品牌测评专家
  • 无蛋奶面包选购指南
  • 数据库专题开篇:零基础迈入 MySQL 的第一步
  • 旧婚包闲置落灰,宁波本地稳妥变现隐私保密 - 奢侈品交易观察员
  • 2026年手表市场走势预判,合肥劳力士腕表科学变现攻略 - 奢侈品回收评测
  • 37 载精工深耕|解锁低空经济 + 医疗设备全新人机交互解决方案
  • 如何快速定制你的开发环境:Acode插件完全指南
  • 杭州欧米茄卡地亚回收测评 男女款腕表2026高价出手攻略 - 奢侈品回收评测
  • 重磅!2026年度JCR分区及【影响因子】即将发布!
  • 绩效管理和敬业度相关联的 4 种方式
  • 3分钟上手AutoRaise:让macOS窗口随鼠标自动激活的神器
  • 5分钟掌握QKeyMapper:Windows最强开源改键工具,让游戏手柄秒变键鼠
  • 如何免费解锁B站4K视频下载:开源工具完全指南
  • 成都配眼镜去哪里靠谱,2026本地配镜选购与价格全指南 - 配眼镜新资讯
  • 卖了3次黄金总结的经验|2026广州回收门店实测,这5个坑我替你踩过了 - 奢侈品回收评测