目录

Django settings

基础

指定配置文件

The django-admin utility

On the server (mod_wsgi)

默认配置

查看你已经更改了哪个配置项

在Python代码中使用settings

运行时更改设置

安全

建你自己的配置文件

Using settings without setting DJANGO_SETTINGS_MODULE

定制默认配置项

Either configure() or DJANGO_SETTINGS_MODULE is required

Calling django.setup() is required for "standalone" Django usage


  • Django settings

Django的settings文件包含Django应用的所有配置项。该文档会介绍settings是如何运行,以及有哪些设置项是可用的。

基础

配置文件只是一个使用模块级变量的一个Python模块。

一组配置例子:

ALLOWED_HOSTS = ['www.example.com']
DEBUG = False
DEFAULT_FROM_EMAIL = 'webmaster@example.com'

注意:

如果将DEBUG设置为False,还需要正确设置ALLOWED_HOSTS设置。

因为配置文件是Python模块,所以要注意以下几项:

  • 不能有Python语法错误

  • 可以用Python语法实现动态配置,例如:
MY_SETTING = [str(i) for i in range(30)]
  • 可以从其他配置文件中引入变量

指定配置文件

DJANGO_SETTINGS_MODULE
使用Django时要通知Django当前使用的是哪个配置文件。可以改变环境变量 DJANGO_SETTINGS_MODULE 实现这一点。

DJANGO_SETTINGS_MODULE 的值是一个符合Python语法的路径,比如 mysite.settings 。要注意settings模块应该在Python可搜索到的路径中 import search path.

The django-admin utility

使用django admin时,可以设置环境变量一次,也可以在每次运行该实用程序时显式传递设置模块。

例子(Unix Bash shell):

export DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserve

例子(Windows shell):

set DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver

使用 --settings 命令行参数指定配置模块路径:

django-admin runserver --settings=mysite.settings

On the server (mod_wsgi)

在服务器环境下,要通知WSGI应用当前使用的是哪个配置文件,用到 os.environ:

import osos.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

阅读 Django mod_wsgi documentation 了解更多关于Django WSGI应用的信息和相关设置。

默认配置

在无需配置的情况下,Django配置文件没必要定义任何配置项。因为每个配置项都有一个明确的默认值。默认值都保存在模块 django/conf/global_settings.py 中。

Django按如下算法编译配置模块:

  • 从 global_settings.py 中加载配置项
  • 从指定的配置文件中加载配置项, 覆盖对应的全局配置项.

注意: 配置文件中不要再重复引用 global_settings , 因为这样做是多余的.

查看你已经更改了哪个配置项

查看你修改了哪几个配置项很容易, 在命令行输入 python manage.py diffsettings 就会显示当前配置与默认配置中的不同.

想了解更多, 可以查看 diffsettings 文档.

在Python代码中使用settings

在具体的Django应用中, 通过引入 django.conf.settings 使用配置, 例:

from django.conf import settingsif settings.DEBUG:# Do something

注意 django.conf.settings 并不是一个模块!-- 而是一个对象!所以引入某个单独的设置项是不可能的:

from django.conf.settings import DEBUG  # This won't work.

还要注意 不应该 直接引入 global_settings 和你自己的配置文件. django.conf.settings 整合了默认配置和网站指定配置, 从而只提供一个接口读取配置. 它也解耦了使用自定义配置文件的代码.

运行时更改设置

不建议在运行时更改设置. 比如, 不要在view中这样用:

from django.conf import settingssettings.DEBUG = True   # Don't do this!

应该只在settings文件中更改设置.

安全

由于配置文件包含敏感信息, 比如数据库密码, 所以应该限制对配置文件的访问. 比如更改文件权限, 从而只能令你和你的WEB服务器能读取配置文件. 这在共享主机的环境中非常重要!

建你自己的配置文件

没有什么能阻止你为自己的django应用程序创建自己的设置。请遵循以下准则:

  • 设置名称必须全部大写。
  • 不要重新设置已存在的配置项

对于序列设置,Django本身使用列表,但这只是一种约定。

Using settings without setting DJANGO_SETTINGS_MODULE

某些场合中, 你想绕过 DJANGO_SETTINGS_MODULE 环境变量来进行配置. 比如, 你正在使用django自带的模板系统, 而你并不想使用环境变量指定某个具体的配置文件.

在这种情况下, 可以手动设定Django的配置项. 要用到下面这个方法:

django.conf.settings.configure(default_settings**settings

举例:

from django.conf import settingssettings.configure(DEBUG=True)

通过 configure() 可以设置任何配置项, 每个参数对应一个值. 参数名称必须大写, 而且参数名必须是真实存在. 没有在 configure() 中出现的设置项在随后用到时, 仍会使用默认值.

如果你并不想使用整个框架, 仅仅是其中一小部分时, 如上述这般配置Django是非常必要的. 事实上, 我们建议您这样做.

因此, 通过 settings.configure() 配置django时, 并不会对当前进程的环境变量做任何修改.. 这意味着在上述情况下你仍然完全掌控着当前环境.

定制默认配置项

如果你实在不想使用 django.conf.global_settings, 而想自定义配置默认值, 你可以在调用 configure() 时使用 default_settings 参数(或是默认做为第一个参数传入). 该参数是一个提供默认值的模块或是类.

在下面这个例子中, 由 myapp_defaults 提供默认值, 并令 DEBUG 被置为 True 而不是从 myapp_defaults 中获取:

from django.conf import settings
from myapp import myapp_defaultssettings.configure(default_settings=myapp_defaults, DEBUG=True)

接下来例子使用 myapp_defaults 做为一个位置参数, 这和上面的效果是等同的:

settings.configure(myapp_defaults, DEBUG=True)

一般来说, 没必要自行设置默认值. Django的默认设置是比较宽松的, 你可以放心地使用. 要注意的是, 如果你传入了新的默认模块, 那它就会完全 替换 Django本身的默认设置. 因此, 你必须为接下来可能会用到的所有设置项都重新指定默认值. 查看 django.conf.settings.global_settings 了解全部默认值.

Either configure() or DJANGO_SETTINGS_MODULE is required

在没有设置 DJANGO_SETTINGS_MODULE 环境的情况下, 就 必须 在运行读取配置项的代码之前就调用 configure() .

如果你没有设置 DJANGO_SETTINGS_MODULE 也没有调用 configure() , 那么Django会在第一次访问配置项时抛出 ImportError 异常.

如果已经调了 DJANGO_SETTINGS_MODULE , 再调用 configure() 的话, Django也会抛出一个 RuntimeError 异常, 表明已经配置了settings.

例如:

from django.conf import settings
if not settings.configured:settings.configure(myapp_defaults, DEBUG=True)

重复调用 configure() 或是在访问任何一个配置项后再调用 configure() , 也会引起错误.

这意味着: 确保要使用 configure() 或 DJANGO_SETTINGS_MODULE 其中一个, 不要多, 也不要少.

Calling django.setup() is required for "standalone" Django usage

如果您使用的是Django“Standalone”组件——例如,编写一个python脚本,该脚本加载并呈现一些Django模板,或者使用ORM获取一些数据——除了配置设置之外,还需要一个步骤。

设置django_设置模块或调用configure()后,需要调用django.setup()加载设置并填充django的应用程序注册表。例如:

import django
from django.conf import settings
from myapp import myapp_defaultssettings.configure(default_settings=myapp_defaults, DEBUG=True)
django.setup()# Now this script or any imported module can use any part of Django it needs.
from myapp import models

请注意,只有当代码真正独立时,才需要调用django.setup()。当您的Web服务器或Django管理员调用时,Django将为您处理此问题。

注意:django.setup()只能调用一次

因此,避免将可重用的应用程序逻辑放在独立的脚本中,这样您就必须从应用程序中其他地方的脚本导入。如果无法避免,请将对django.setup()的调用放入if块中

if __name__ == '__main__':import djangodjango.setup()

转自Django官方文档:https://docs.djangoproject.com/zh-hans/2.0/topics/settings/#default-settings

Python-Django settings置详解相关推荐

  1. django的settings配置详解

    1.介绍 BASE_DIR  默认值:os.path.dirname(os.path.dirname(os.path.abspath(__file__))). 这个是Django项目文件夹所在目录得绝 ...

  2. Django入门基础详解

    本次使用django版本2.1.2 安装django 安装最新版本 pip install django 安装指定版本 pip install django==1.10.1 查看本机django版本 ...

  3. Django REST 框架详解 07 | 三大认证与权限六表

    文章目录 一.三大认证 1. 认证组件:校验用户 2. 权限组件:校验用户权限 3. 频率组件:限制视图接口被访问次数 4. 分析源码 二.权限六表 1. RBAC 认证 2. 权限三表 3. 权限五 ...

  4. python爬虫入门实例-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 要求是把你所在城市过去一年的历史数据爬出来. 分析网站 我们可以看到,我们需要的天气数据都是放在图表上的,在切换月份的时候,发现只有 ...

  5. docker 打包部署 python项目_Docker如何部署Python项目的实现详解

    Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. 在本篇中,我将介绍如 ...

  6. python编程入门与案例详解-Python爬虫天气预报实例详解(小白入门)

    本文研究的主要是Python爬虫天气预报的相关内容,具体介绍如下. 这次要爬的站点是这个:http://www.weather.com.cn/forecast/ 要求是把你所在城市过去一年的历史数据爬 ...

  7. Python Turtle 海龟绘图详解官方文档中文版

    Python Turtle 海龟绘图详解 (官方文档中文版)-安徽省太湖中学陈晓中整理 概述 海龟绘图很适合用来引导孩子学习编程. 最初来自于 Wally Feurzeig, Seymour Pape ...

  8. 【Python】python之subprocess模块详解

    [Python]python之subprocess模块详解 subprocess模块 subprocess是Python 2.4中新增的一个模块,它允许你生成新的进程,连接到它们的 input/out ...

  9. Python 命令行参数详解

    Python 命令行参数详解 0. 命令行参数 1. sys.argv 2. getopt 2.1 getopt.getopt 方法 2.2 Exception getopt.GetoptError ...

最新文章

  1. 1.4亿围观!宝藏副教授火速走红:如果不喜欢我的研究方向,我可以改!
  2. matlab 函数 向量参数,Scipy integrate(quad,quadration,nquad)不能集成向量参数化函数?等效函数(MATLAB works)...
  3. python中subplot是什么意思_python matplotlib中的subplot函数使用详解
  4. 《精通Windows API-函数、接口、编程实例》——第4章文件系统
  5. Step by Step 使用AET 创建Product extension fields
  6. python - super 寻找继承关系
  7. w3cSchool jquery学习
  8. JDBC调用存储过程,以及存储过程 事务的使用.....
  9. 7.3.Zeng_Cache(4) --- 后端
  10. shineblink 雨滴感应传感器
  11. 钢构件建筑材料英国UKCA认证—EN 13381-8
  12. 2019年技术盘点容器篇(三):阿里专家谈容器:既叫好又叫座? | 程序员硬核评测
  13. android textview 文字倒影,textview 倒影
  14. MATLAB小知识(三)——输出矩阵到TXT
  15. Word文档误删怎样恢复?6种实用方法分享给你
  16. JavaOOP面试题(108道)
  17. 高质量无损图片压缩算法
  18. JAVA狗叫源代码_从头认识java-1.1 编程语言抽象过程以及java的基础特性
  19. TP6 事件绑定、监听、订阅
  20. adwcleaner_Malwarebytes AdwCleaner

热门文章

  1. 简单实现前端选择上传图片并显示略缩图
  2. 【C语言】宏和函数形式的函数的区别
  3. 设计模式-享元模式、享元模式示例
  4. 记红辣椒苹果审核旅程
  5. markdown文档规范练习
  6. 沈阳工程学院计算机专业好吗,沈阳工程学院最好的专业是什么
  7. uni.app小程序实现跳转获取数据
  8. 消灭该死的重复 下(4)pass 通过
  9. 如何使用iPhone生存僵尸启示录
  10. unity LeapMotion 手势旋转,位移,缩放