如何让Python项目的.env文件保存修改后的账号密码配置?
账号密码校验功能.env持久化改造实现
前置依赖
首先安装.env文件处理依赖:pip install python-dotenv
修改后完整代码
import os from dotenv import load_dotenv # 加载本地.env文件中的配置 load_dotenv() def save_env_config(key: str, value: str) -> None: """将配置更新同步写入.env文件实现持久化存储""" env_lines = [] # 读取现有配置内容 if os.path.exists('.env'): with open('.env', 'r', encoding='utf-8') as f: env_lines = f.readlines() # 匹配需要更新的配置项 key_exist = False for index, line in enumerate(env_lines): strip_line = line.strip() # 跳过注释和空行 if not strip_line or strip_line.startswith('#'): continue if strip_line.split('=')[0].strip() == key: env_lines[index] = f'{key}={value}\n' key_exist = True break # 配置项不存在则追加 if not key_exist: env_lines.append(f'{key}={value}\n') # 写回配置文件 with open('.env', 'w', encoding='utf-8') as f: f.writelines(env_lines) # 初始化默认账号密码,配置缺失时自动生成 if not os.getenv('USER'): save_env_config('USER', 'admin') os.environ['USER'] = 'admin' if not os.getenv('PASSWORD'): save_env_config('PASSWORD', 'admin') os.environ['PASSWORD'] = 'admin' print('请登录,默认账号密码均为admin') print('用户名:') inputed_username = input() logged_username = os.getenv('USER') if inputed_username == logged_username: logged_password = os.environ.get('PASSWORD') print('密码:') inputed_password = input() if inputed_password == logged_password: print(f'欢迎 {inputed_username}!') while True: print('请选择操作:') print(''' 1: 修改用户名 2: 修改密码 3: 退出登录 ''') ch1 = input().strip() if ch1 == '1': print('请输入新用户名:') new_username = input().strip() os.environ['USER'] = new_username save_env_config('USER', new_username) print('用户名修改成功') if ch1 == '2': print('请输入新密码:') new_password = input().strip() os.environ['PASSWORD'] = new_password save_env_config('PASSWORD', new_password) print('密码修改成功') if ch1 == "3": break else: print('密码错误') else: print('用户名错误')
具体改动点
- 引入
python-dotenv库处理.env配置文件,替换原代码硬编码写入环境变量的逻辑,程序启动时优先读取本地配置文件的账号密码 - 新增
save_env_config持久化写入函数,修改用户名或密码时会同步更新.env文件内容,解决原代码修改仅在当前进程生效、程序重启后恢复默认配置的问题 - 新增配置初始化逻辑:.env文件不存在或缺少对应配置项时,自动写入默认的admin账号密码,无需手动创建配置文件
- 优化交互提示为中文,补充修改成功的反馈提示,交互逻辑更清晰
内容的提问来源于stack exchange,提问作者Ayden Quinn
相关产品推荐
相关产品推荐

