You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyScript中将特定文件持久化到localStorage以避免页面刷新后数据重置?

如何在PyScript中将特定文件持久化到localStorage以避免页面刷新后数据重置?

我太懂这种烦恼了——PyScript默认用的是Pyodide的内存文件系统,页面一刷新,所有临时文件直接清空,之前改的oauth.json自然就没了!要让这个文件能在刷新后依然保留,我们可以通过把文件内容和浏览器的localStorage双向同步来解决,而且还能让你的依赖库照常使用文件读写逻辑,不用改太多代码。

核心思路

Pyodide的文件系统存在内存里,刷新就消失,但浏览器的localStorage是持久化存在用户本地的。我们要做的就是:

  1. 页面加载时,先从localStorage把保存的oauth.json内容读出来,写入Pyodide的文件系统;
  2. 每次修改文件后,再把最新的内容同步回localStorage,确保下次刷新能拿到最新数据。

修改后的完整代码

结合你现有的代码,我调整了一下,加上了同步逻辑:

from pyscript import document, window
from os import path, getcwd
import json

# 配置需要持久化的文件和localStorage的标识键
TARGET_FILE = "./oauth.json"  # 如果你要操作/home/pyodide/oauth.json,直接改这里就行
STORAGE_KEY = "pyscript_oauth_json"  # 用独特的键避免和其他localStorage数据冲突

def sync_to_local_storage(content):
    """把文件内容同步到浏览器localStorage"""
    window.localStorage.setItem(STORAGE_KEY, content)

def sync_from_local_storage():
    """从localStorage恢复内容到Pyodide文件系统"""
    saved_content = window.localStorage.getItem(STORAGE_KEY)
    
    if saved_content:
        # 如果localStorage有保存的数据,写入文件
        with open(TARGET_FILE, "w", newline="\n", encoding="utf-8") as f:
            f.write(saved_content)
        print("已从localStorage恢复oauth.json内容")
    else:
        # 没有保存的数据,创建空文件并同步到localStorage
        empty_content = "{}"
        with open(TARGET_FILE, "w", newline="\n", encoding="utf-8") as f:
            f.write(empty_content)
        sync_to_local_storage(empty_content)
        print("创建新的oauth.json并同步到localStorage")

# 页面加载时先执行恢复逻辑
sync_from_local_storage()

# 示例:如果需要修改文件内容,记得同步到localStorage
def update_oauth_data(new_data):
    # 写入文件系统
    with open(TARGET_FILE, "w", newline="\n", encoding="utf-8") as f:
        json.dump(new_data, f, indent=2)
    # 同步到localStorage
    with open(TARGET_FILE, "r", encoding="utf-8") as f:
        latest_content = f.read()
    sync_to_local_storage(latest_content)
    print("oauth.json已更新并同步到localStorage")

# 测试用例(可以注释掉)
# update_oauth_data({"access_token": "abc123", "expires_in": 3600})

关键细节说明

  • 路径适配:如果你要操作的是/home/pyodide/oauth.json,只需要把TARGET_FILE的值改成这个绝对路径就行,Pyodide完全支持。
  • 同步时机:如果你的依赖库会自动修改这个文件,那你需要在库完成写入后手动调用sync_to_local_storage;如果是你自己的代码修改文件,就在写入后同步就行。
  • 存储限制:localStorage的容量一般在5MB左右,所以这个方法适合小文件(比如你的oauth配置文件完全没问题),大文件不建议用这个方式。

备注:内容来源于stack exchange,提问作者user24521401

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 10:04:37