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

Python+Django实战|个人家庭记账理财系统:多账户管理、收支分类、日常记账、预算管控、账单检索、数据可视化、报表导出 一、项目背景与痛点个人、家庭、自由职业者以及小型工作室的日常收支记账是普遍需求。目前主流记账方式分为纸质手写账本、本地Excel表格、第三方手机记账APP三大类各类方式均存在明显短板随着收支记录增多、账户变多管理难度持续上升核心痛点总结如下纸质账本易丢失、统计困难手写账单容易涂改、破损、遗失月度/年度收支汇总完全依靠人工计算耗时且极易出错Excel表格协同性差本地表格无法多设备同步家庭多人无法共用一套账本历史账单检索、分类统计操作繁琐第三方APP隐私与广告风险主流记账软件充斥弹窗广告高级统计、导出功能需要付费个人收支数据上传第三方服务器存在隐私泄露隐患多账户无法统一管理现金、银行卡、微信、支付宝等多个资金账户收支分散无法一站式汇总查看总资产缺少预算管控机制无法提前设置月度、分类消费预算超支后无提醒难以做到理性理财收支分析能力薄弱仅能记录账单无法自动生成占比、趋势图表不能直观分析消费结构账单归档不便历史账单难以批量导出、离线备份长期数据无法线下留存归档。针对传统记账方式与商用APP的各类问题本次基于PythonDjango4.2MySQLEChartsExcel导出搭建轻量化私有化记账理财系统实现多资金账户管理、收支分类、日常记账、预算预警、账单检索、可视化分析、报表导出全套闭环能力。本项目开辟个人理财、家庭记账全新赛道和日志、天气、智能在线考试、智能图书、访客系统、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. 账本权限模块区分个人与共用场景保障数据隐私安全独立账本单人使用时数据完全私密他人无法访问家庭共享支持添加共享成员多人共用一套账本权限统一管控操作权限普通成员仅可记账、查询管理员可维护分类与账户访问拦截未登录用户禁止进入记账系统。五、创新价值与亮点私有化数据存储所有收支数据留存自有服务器不上传第三方平台彻底解决记账隐私泄露问题多账户统一管理整合现金、银行卡、线上支付等全类型账户一站式查看总资产与明细双重预算预警月度总预算分类预算双重管控超支实时提醒辅助理性消费全维度可视化分析多类型图表解析收支结构告别人工统计分析轻量化零广告纯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):收支分类模型namemodels.CharField(max50,verbose_name分类名称)cat_typemodels.CharField(max10,choicesIN_OUT_TYPE,verbose_name收支类型)is_enablemodels.BooleanField(defaultTrue,verbose_name是否启用)create_timemodels.DateTimeField(auto_now_addTrue)def__str__(self):returnself.nameclassAccountInfo(models.Model):资金账户模型usermodels.ForeignKey(User,on_deletemodels.CASCADE,verbose_name所属用户)account_namemodels.CharField(max50,verbose_name账户名称)account_typemodels.CharField(max10,choicesACCOUNT_TYPE,verbose_name账户类型)balancemodels.DecimalField(max_digits10,decimal_places2,verbose_name当前余额)is_enablemodels.BooleanField(defaultTrue,verbose_name是否启用)create_timemodels.DateTimeField(auto_now_addTrue)def__str__(self):returnself.account_nameclassBillRecord(models.Model):账单记录模型usermodels.ForeignKey(User,on_deletemodels.CASCADE,verbose_name记账人)accountmodels.ForeignKey(AccountInfo,on_deletemodels.CASCADE,verbose_name所属账户)categorymodels.ForeignKey(BillCategory,on_deletemodels.CASCADE,verbose_name收支分类)bill_typemodels.CharField(max10,choicesIN_OUT_TYPE,verbose_name收支类型)amountmodels.DecimalField(max_digits10,decimal_places2,verbose_name金额)bill_datemodels.DateField(verbose_name交易日期)remarkmodels.CharField(max200,blankTrue,verbose_name备注)voucher_imgmodels.ImageField(uploadvoucher/,blankTrue,verbose_name消费凭证)create_timemodels.DateTimeField(auto_now_addTrue)classBudgetSet(models.Model):预算设置模型usermodels.ForeignKey(User,on_deletemodels.CASCADE,verbose_name所属用户)categorymodels.ForeignKey(BillCategory,nullTrue,blankTrue,on_deletemodels.CASCADE,verbose_name分类预算)month_budgetmodels.DecimalField(max_digits10,decimal_places2,verbose_name月度预算金额)create_timemodels.DateTimeField(auto_now_addTrue)示例2预算超支校验工具类core/budget_check.pyfromdatetimeimportdatetimefromdjango.db.modelsimportSumfromapps.bill_record.modelsimportBillRecordfromapps.budget_set.modelsimportBudgetSetclassBudgetCheck:预算校验工具类classmethoddefget_month_used(cls,user,category_idNone):获取当月已支出金额nowdatetime.now()yearnow.year monthnow.month# 筛选当月支出账单queryBillRecord.objects.filter(useruser,bill_typeexpend,bill_date__yearyear,bill_date__monthmonth)ifcategory_id:queryquery.filter(category_idcategory_id)totalquery.aggregate(totalSum(amount))[total]or0returntotalclassmethoddefis_over_budget(cls,user,category_idNone):判断是否超预算usedcls.get_month_used(user,category_id)ifcategory_id:budgetBudgetSet.objects.filter(useruser,category_idcategory_id).first()else:budgetBudgetSet.objects.filter(useruser,category__isnullTrue).first()ifnotbudget:returnFalse,未设置预算ifusedbudget.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.modelsimportBillRecordmethod_decorator(login_required,namedispatch)classBillAddView(View):defget(self,request):# 加载可用账户、分类account_listAccountInfo.objects.filter(userrequest.user,is_enableTrue)cat_listBillCategory.objects.filter(is_enableTrue)returnrender(request,bill_add.html,locals())defpost(self,request):account_idrequest.POST.get(account_id)cat_idrequest.POST.get(category_id)bill_typerequest.POST.get(bill_type)amountrequest.POST.get(amount)bill_daterequest.POST.get(bill_date)remarkrequest.POST.get(remark)voucherrequest.FILES.get(voucher_img)# 基础校验ifnotamountorfloat(amount)0:messages.error(request,请输入合法金额)returnredirect(bill_add)try:accountAccountInfo.objects.get(idaccount_id,userrequest.user)categoryBillCategory.objects.get(idcat_id)except(AccountInfo.DoesNotExist,BillCategory.DoesNotExist):messages.error(request,账户或分类信息异常)returnredirect(bill_add)# 新增账单记录BillRecord.objects.create(userrequest.user,accountaccount,categorycategory,bill_typebill_type,amountamount,bill_datebill_date,remarkremark,voucher_imgvoucherifvoucherelseNone)messages.success(request,账单记录保存成功)returnredirect(bill_list)八、总结与展望本篇博客聚焦个人家庭记账理财全新赛道基于PythonDjango搭建私有化Web记账系统和日志、天气、智能在线考试、智能图书、物业、固定资产、问卷、会议室、音乐、进销存、租赁、考勤等所有往期项目完全独立。项目融合多表关联、日期周期计算、预算算法、聚合统计、ECharts可视化、Excel导出等核心技术深度贴合个人、家庭、小型团队的日常记账理财场景数据私有化的特性区别于主流商用APP实用性与差异化突出。系统覆盖账户管理、分类配置、账单录入、预算预警、检索分析、报表导出全流程代码规范、部署简单既适合学习Django数据统计、文件处理、周期算法等知识点也是毕业设计、求职简历中生活化场景类优质实战项目。后续迭代规划新增资产变动流水记录账户转账、存取款等资金调拨行为新增月度理财报告自动生成文字版收支总结并支持下载接入消息提醒预算即将用尽、账户大额消费主动推送提示新增数据备份与恢复功能支持一键全量备份账单数据。