在django/conf/__init__.py里,最后一行,settings = LazySettings()。到LazySettings(),继承自LazyObject,django/utils/functional.py里,初始化的时候self._wrapped为object()。LazyObject也设置了__getattr__,不过差不多。回头看LazySettings的__getattr__,开始要执行_setup,然后使用getattr取值。—-def _setup(self, name=None):settings_module = os.environ[ENVIRONMENT_VARIABLE],这个在wsgi脚本,或者在manage.py里有设置,就是项目的setting,例如mysite.settings。然后self._wrapped = Settings(settings_module)。Settings应该是设置值的。—-Settings集成自BaseSettings,BaseSettings里只有一个__setattr__方法。看Settings的init方法,第一步导入global_settings,在同一个目录里,定义了全局的setting。导入使用dir获得所有变量名,判断变量名如果全为大写,就setattr。然后看BaseSettings,第一个判读”MEDIA_URL”, “STATIC_URL”,必须以’/‘结尾。然后判断ALLOWED_INCLUDE_ROOTS必须是str,然后就设置。然后使用import_module()导入项目settings,py3带的这个功能。。。然后后边类似的判断导入项目settings,其中”INSTALLED_APPS”, “TEMPLATE_DIRS”必须是tuple,不能是str不然设置成tuple。必须有SECRET_KEY,设置TIME_ZONE。ok了,导入变量完毕了。—-self._configure_logging()settings里的日志设置,先不看了,以后再说。
django源码阅读,settings
原文地址:django源码阅读,settings, 感谢原作者分享。 加油鼓励看好你,一天更比一天强
相关文章:
你感兴趣的文章:
- 参加欧洲决赛最多场次的前5 名 球员
- 空气开关与漏电开关的区别
- 小米1S如何关闭应用 小米1S快速关闭应用方法图文介绍
- 红旗Linux6.0安装使用心得
- Win10怎么添加蓝牙鼠标?
- 七彩虹蓝屏解决教程