手写配置文件实现两套配置文件的切换
适用场景,当用户配置了自己的配置文件后,以用户的配置为准;用户不配置时,以系统的为准,避免程序因配置文件而出错!
这里我们仿照Django的源码思想来实现!
django源码
一般我们导入的settings配置文件都是自己创建Django项目时自动生成的那个文件,这样我们就只能使用这一个文件中的配置
from restful import settings # restful 就是我们创建的项目名 |
但其实在Django中还有一个叫settings的配置文件,它是一个全局的配置,当我们导入这个settings后,既可以使用Django的默认配置,还可以用自定义的配置,或覆盖Django的默认配置!
from django.conf import settings |
首先大致看一下Django的源码实现过程,点击settings后进到文件中,会看到它实例化了LazySettings这个类!
再看Settings里,做了什么?
这样简单理解后,我们自己也可手写一个配置文件,以后可以直接拷贝使用!
自己手写
首先,创建出目录结构,如下:
OK!开始写代码实现该功能
Setting类的__init__.py文件
# -*- coding:utf-8 -*- import os import importlib from . import global_setting class Setting: def __init__( self ): # 查找配置时先找系统配置 # 循环系统的默认配置,将配置文件的变量赋值给self for settings in dir (global_setting): if settings.isupper(): setattr ( self , settings, getattr (global_setting, settings)) # 再找用户自定义的配置 # 从环境变量取出用户自定义配置,并拿到路径里的py文件 mod = importlib.import_module(os.environ.get( 'USER_SETTING' )) # 循环用户自定义配置,将配置文件的变量赋值给self for settings in dir (mod): if settings.isupper(): setattr ( self , settings, getattr (mod, settings)) setting = Setting() |
test.py文件
# -*- coding:utf-8 -*- import os # 在导入setting之前要将用户自定义配置文件添加到环境变量中 os.environ.setdefault( 'USER_SETTING' , 'user_setting.settings' ) if __name__ = = '__main__' :<br> # 导入系统的配置文件 from conf import setting print (setting.DEBUG) |
global_setting.py文件
DEBUG = False |
settings.py文件
DEBUG = True |
执行test.py文件的结果,还在终端显示True,如果将settings.py中的DEBUG注释,在执行test.py终端将会显示False,如此就完成了!!
本文来自博客园,仅供参考学习,如有不当之处还望不吝赐教,不胜感激!转载请注明原文链接:https://www.cnblogs.com/rong-z/p/10515888.html
作者:cnblogs用户
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人