您的位置:首页 >Python Flet应用实现数据持久化方法
发布于2026-04-15 阅读(0)
扫一扫,手机访问

Flet 应用默认不保存数据,关闭后任务会丢失;可通过本地文件(如 JSON 或 TXT)持久化存储用户任务,无需强制注册认证,轻量可靠,同时兼容桌面与 Web 环境。
Flet 应用默认不保存数据,关闭后任务会丢失;可通过本地文件(如 JSON 或 TXT)持久化存储用户任务,无需强制注册认证,轻量可靠,同时兼容桌面与 Web 环境。
在 Flet 中构建待办清单(To-Do List)应用时,一个常见痛点是:用户添加的任务在应用重启或浏览器刷新后全部消失。这是因为 Flet 的默认状态完全驻留在内存中——页面重建、进程终止或 Web 页面重载都会清空所有 page.controls 和变量数据。解决该问题的核心不是引入复杂的身份认证系统,而是实现数据的外部持久化存储。
JSON 是最适配 Flet 场景的轻量级持久化方式:结构清晰、Python 原生支持(json 模块)、可读性强,且能自然映射任务列表(如 list[dict])。相比纯文本(TXT)或独立 Python 模块(如 users.py),JSON 更安全(避免代码注入风险)、更灵活(支持嵌套字段如完成状态、创建时间),且 Web 环境下仍可通过后端或 flet 的 FilePicker 配合本地文件系统(桌面)或 IndexedDB(Web)间接支持——但对初学者,优先采用服务端无关的本地 JSON 方案(适用于桌面应用)或模拟本地存储(Web 限简单场景)。
import flet as ft
import json
import os
# 定义数据文件路径(自动创建于当前目录)
DATA_FILE = "tasks.json"
# 初始化数据:若文件不存在,创建空列表
def load_tasks():
if os.path.exists(DATA_FILE):
try:
with open(DATA_FILE, "r", encoding="utf-8") as f:
return json.load(f)
except (json.JSONDecodeError, OSError):
return []
return []
def save_tasks(tasks):
try:
with open(DATA_FILE, "w", encoding="utf-8") as f:
json.dump(tasks, f, ensure_ascii=False, indent=2)
except OSError as e:
print(f"⚠️ 保存失败: {e}")
def main(page: ft.Page):
page.title = "持久化待办清单"
tasks = load_tasks() # 启动时加载已有任务
# 任务输入框
txt_task = ft.TextField(hint_text="输入新任务...", expand=True)
# 任务列表控件(动态更新)
task_list = ft.Column()
def add_task(e):
if txt_task.value.strip():
new_task = {
"id": len(tasks) + 1,
"text": txt_task.value.strip(),
"done": False
}
tasks.append(new_task)
save_tasks(tasks) # 立即写入磁盘
update_task_list()
txt_task.value = ""
page.update()
def toggle_task(e, task_id):
for t in tasks:
if t["id"] == task_id:
t["done"] = not t["done"]
break
save_tasks(tasks)
update_task_list()
def update_task_list():
task_list.controls.clear()
for task in tasks:
cb = ft.Checkbox(
label=task["text"],
value=task["done"],
on_change=lambda e, tid=task["id"]: toggle_task(e, tid)
)
task_list.controls.append(cb)
# 确保页面响应式更新
page.update()
# 首次渲染任务列表
update_task_list()
# 页面布局
page.add(
ft.Text("? 我的待办清单", size=24, weight="bold"),
ft.Row([txt_task, ft.ElevatedButton("添加", on_click=add_task)]),
ft.Divider(),
task_list
)
ft.app(target=main)✅ 关键说明:
- load_tasks() 在应用启动时读取 tasks.json,确保历史任务立即显示;
- 每次增/改操作后调用 save_tasks(),保证数据实时落盘;
- 使用 id 字段避免重复/错位(比纯索引更健壮);
- 异常处理覆盖了文件损坏、权限不足等常见问题。
通过以上实现,你的 Flet 待办应用便具备了真正的“记忆能力”——无论是关闭重开、崩溃恢复,还是 Web 页面刷新,任务数据都将毫发无损。坚持“数据与界面分离”原则,你已迈出了构建可靠应用的关键一步。
上一篇:追剧达人更新提醒设置教程
下一篇:迅雷截图快捷键修改教程
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9