目录

一、需求分析

二、实现思路

2-1 实现目录

2-2 执行文件 - 环境变量配置、导入settings属性

2-3 conf文件夹__init__.py文件 - 写入setting类、实例化放入属性的setting对象

2-4 配置文件 - globalsetting.py 、setting.py


一、需求分析

  1. 存在内置setting文件 - conf/globalsetting.py
  2. 存在用户自配setting文件 - usersetting/setting.py
  3. 若不存在同名属性,则使用默认setting文件内属性
  4. 若存在同名属性,优先使用用户文件

二、实现思路

2-1 实现目录

\"\"

2-2 执行文件 - 环境变量配置、导入settings属性

import os

# 将usersetting.setting存入user_setting属性内 并存入环境变量
os.environ.setdefault(\'user_setting\', \'usersetting.setting\')
# 导入conf文件夹内的__init__内创建的属性settings
from conf import settings


print(settings.DEBUG)
print(os.environ)
# environ({\'ALLUSERSPROFILE\': \'C:\\\\ProgramData\',……,\'USER_SETTING\': \'usersetting.setting\'}})
print(os.environ.get(\'user_setting\'))
# usersetting.setting

2-3 conf文件夹__init__.py文件 - 写入setting类、实例化放入属性的setting对象

import os
import importlib
from conf import globalsetting


class Setting:
    def __init__(self):
        \'\'\'
        获取默认全局设置globalsetting文件内大写属性
        \'\'\'
        print(dir(globalsetting))  # dir() 获取对象内的所有属性名
        # [\'DEBUG\', \'__builtins__\', \'__cached__\', \'__doc__\', \'__file__\',
        #  \'__loader__\', \'__name__\', \'__package__\', \'__spec__\']
        for setting in dir(globalsetting):
            # 获取大写属性名
            if setting.isupper():
                # 设置 self 对象内的 setting 属性的值为 globalsetting 内的 setting
                # 即,settings对象内的DEBUG属性为globalsetting的DEBUG
                setattr(self, setting, getattr(globalsetting, setting))
        \'\'\'
        获取用户文件内的属性放入对象内,对默认属性进行覆盖
        \'\'\'
        # os.environ  获取系统环境变量
        user_setting = os.environ.get(\'user_setting\')
        # importlib.import_module 实例化 usersetting\\\\setting.py文件为mod对象
        mod = importlib.import_module(user_setting)
        print(mod)
        # <module \'usersetting.setting\' from
        # \'D:\\\\python\\\\video_review\\\\Django\\\\day101\\\\mysetting\\\\usersetting\\\\setting.py\'>
        for setting in dir(mod):
            if setting.isupper():
                setattr(self, setting, getattr(mod, setting))

# 实例化对象,用于执行文件调用
settings = Setting()

2-4 配置文件 - globalsetting.py 、setting.py

\"\"

收藏 打印