
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.1.1 Settings类
Settings类的定义如下:


从Settings类中可以直接得到第2个问题的答案。在该类的初始化方法中,先在全局的配置模块(global_settings模块)中遍历大写的属性及其值并添加到该Settings对象中。这里用到了dir()和setattr()这两个非常常见且十分重要的函数,前者表示获取模块的属性,后者表示给对象设置属性及属性值。这样Settings对象就具备了global_settings模块中的属性,并且其值和global_settings模块中的相同。之后再导入传入的settings_module模块,按同样的方式设置该Settings对象的属性。如果settings_module模块和global_settings模块中的属性有交叉,则以settings_module模块的为准(因为是后设置的)。接着是一些必须要设置的属性值,比如SECRET_KEY值等。如果不在settings_module模块中设置,即默认为空字符串,则会直接抛出异常。下面看一下该类的一个使用示例,代码如下:


上面的示例演示了在配置文件中定义的三个变量值:DEBUG、SECRET_KEY和FILE_UPLOAD_MAX_MEMORY_SIZE。其中,前两个变量在first_django.settings模块中已定义,而第三个变量没有在first_django.settings模块中定义。因此,最终得到的Settings对象的前两个属性值为first_django.settings模块中定义的变量值,而第三个属性值为django.conf.global_settings模块中定义的变量值。