Django项目的设置文件位于项目同名目录下,名叫settings.py。这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证。

一、简述

settings.py文件本质上是一个Python模块,带有模块级别的变量。

下面是一些示例设置:

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

注:当DEBUG为False时,必须设置ALLOWED_HOSTS的值。

配置settings.py时:

  • 不允许出现Python层面的语法错误;
  • 可以使用普通的Python语法动态地设置,例如:MY_SETTING = [str(i) for i in range(30)]
  • 可以从其它设置文件导入值。

二、指定配置文件

当你使用Django时,你必须告诉它你要使用哪个配置文件来启动服务。也就是给环境变量DJANGO_SETTINGS_MODULE赋值。这个值要使用Python路径的语法,例如mysite.settings,而不是操作系统的文件路径语法。 注意,被设置的配置文件应该在Python的导入查找路径中。

默认情况下,我们是不需要设置这个变量的,直接启动项目就可以。但是,有时候就会有需要使用别的配置启动项目的情形。

django-admin命令:

当使用django-admin命令时, 可以设置临时环境变量,或者每次运行该工具时显式地指定配置文件。

例如在Unix Bash shell下:

export DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver

在Windows shell下,也就是cmd环境:

set DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver

使用--settings命令行参数可以手工指定:

django-admin runserver --settings=mysite.settings

如果是在服务器环境中,比如mod_wsgi网关接口,需要告诉WSGI,你准备使用哪个设置文件。这可以使用os.environ实现:

import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

再次强调,所有上面的操作都要求mysite.settings必须在查找路径中,否则要用绝对路径。

三、默认配置

Django的配置文件并不需要定义所有的选项,每个选项都有一个默认值,这些默认值位于django/conf/global_settings.py模块中。

Django加载配置的顺序是这样的:

  1. global_settings.py中加载默认配置;
  2. 从指定的配置文件中加载(通常是settings.py),如有必要则覆盖global_settings.py中的默认配置。

有一个简单的方法可以查看当前有哪些设置与默认的设置不一样了,也就是python manage.py diffsettings命令。

四、在Django环境中使用settings

所谓的在Django环境中,指的是要使用settings的模块(可以简单的理解为局域网内主机),必须是Django工作状态中能够链接的模块,不能是孤零零,额外的一个Python脚本(外部主机)。这时,可以通过导入django.conf.settings来使用配置文件。 例如:

from django.conf import settings

if settings.DEBUG:
# Do something

注意,django.conf.settings不是一个模块,而是一个对象。 所以不可以单独导入每个配置项:

from django.conf.settings import DEBUG  # 这是错误的做法

五、不要在运行时更改设置

请不要在Django项目运行时改变设置。 例如,不要在视图中这样做:

from django.conf import settings

settings.DEBUG = True   # 不要这么做

六、注意安全

因为settings.py经常会包含敏感的信息,例如管理员、远程主机、数据库的用户名或密码,你应该尽一切可能来限制对它的访问。 例如,修改它的文件权限使得只有你和Web服务器使用者可以读取它。

七、添加自己的配置项

如果要添加自己的配置项,需遵循以下准则:

  • 配置项名称必须全为大写。
  • 不要使用一个已经存在的设置

八、自定义默认设置

如果你想让默认值来自其它地方而不是django.conf.global_settings,你可以传递一个提供默认设置的模块或类作为default_settings参数(或第一个位置参数)给configure()方法调用。

在下面的示例中,默认的设置来自myapp_defaults,并且单独设置DEBUG为True,而不论它在myapp_defaults中的值是什么:

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

下面的示例和上面一样,只是使用myapp_defaults作为一个位置参数:

settings.configure(myapp_defaults, DEBUG=True)

正常情况下,还是不要用这种方式覆盖默认值。Django的默认配置文件还是很可靠的,你可以安全地使用它们。 注意,如果你使用自己写的默认模块,它将完全取代Django的默认模块,你必须指定每个可能用到的配置项的值。 完整的配置项清单,参考django.conf.settings.global_settings模块。

九、configure()DJANGO_SETTINGS_MODULE二者只能用一

如果你没有设置DJANGO_SETTINGS_MODULE环境变量,你必须使用configure()方法来加载配置。。

如果你没有设置DJANGO_SETTINGS_MODULE,也没有调用configure(),在首次调用配置文件时Django 将引发一个ImportError异常。也就是我们最常见的问题:为啥我启动不了Django?为什么我的脚本不能调用Django的功能?为什么我的代码无法链接到Django内部?

如果你设置了DJANGO_SETTINGS_MODULE,并访问了一下设置,然后又调用configure(),Django 将引发一个RuntimeError异常,表示已经有配置,不要重复配置。

有个属性正好可以用于种情况,防止出现异常:

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

总结:configure()DJANGO_SETTINGS_MODULE只能用一个,并且只能用一次。不可以两个都用和都不用

十、外部脚本调用Django环境:django.setup()

如果你使用外部脚本, 加载一些Django模板,或者使用ORM来获取一些数据,除了配置settings模块之外,还需要一个步骤。

也就是在设置DJANGO_SETTINGS_MODULE或调用configure()之后,还需要调用django.setup(),像这样:

import django
from django.conf import settings
from myapp import myapp_defaults settings.configure(default_settings=myapp_defaults, DEBUG=True)
django.setup() # 现在可以访问Django项目内部的模块了
from myapp import models

请注意,只有真正独立的外部脚本,才需要调用django.setup()。前面有说到过,当处于服务器调用环境,或通过django-admin调用,Django将自动为你加载环境。

django.setup()只能调用一次。尽量使用下面的方式,防止重复调用:

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

配置 Django的更多相关文章

  1. centos7 apache httpd安装和配置django项目

    一.安装httpd服务 apache在centos7中是Apache HTTP server.如下对httpd的解释就是Apache HTTP Server.所以想安装apache其实是要安装http ...

  2. django 配置 Django

    Django项目的设置文件位于项目同名目录下,名叫settings.py.这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证. 一.简述 settings.py文件本质上是一个 ...

  3. Django基础学习七之如何配置django+mysql

    很久没有更新博客了,也有段时间没有持续性的学习了,感觉堕落了,今天继续开始学习吧 今天主要来学习一下在django下配置mysql的数据库和使用admin用户管理数据库 1.在project中的set ...

  4. pycharm中配置Django运行环境(包括run manage.py task)

    1.特别注意Environment variables(环境变量)的配置 DJANGO_SETTINGS_MODULE=(项目名).settings 如: DJANGO_SETTINGS_MODULE ...

  5. 安装配置Django

    安装配置Django 以下是基于python3.5 pip install Django 把python环境目录Scripts配置到环境变量,主要在命令行中随时可以使用django-admin 验证 ...

  6. Windows10下Apache2.4配置Django

    开发环境 Windows 10 x64 Apache 2.4 x64 Python 2.7.11 x64 Django 1.9.6+ 下载和安装mod_wsgi 到 http://download.c ...

  7. 第六章:Django 综合篇 - 1:配置 Django

    Django项目的设置文件位于项目同名目录下,名叫settings.py.这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证. 一.简述 settings.py文件本质上是一个 ...

  8. pycharm快捷键、配置virtualenv环境,配置django调试,配置远程调试

    pycharm安装和首次使用 http://blog.csdn.net/chenggong2dm/article/details/9365437 快捷键: 找文件.代码.引用相关 1.双击shift ...

  9. CentOS 6 安装 Python3.5以及配置Django

    http://www.jianshu.com/p/6199b5c26725 文/FiveStrong(简书作者)原文链接:http://www.jianshu.com/p/6199b5c26725著作 ...

随机推荐

  1. Keil开发环境如何生成BIN文件

    为什么需要BIN文件呢? 有些烧录器只支持BIN文件. 进行OTA远程升级时,只能使用BIN文件. 使用JLink脚本文件进行一键烧录时,只支持BIN文件. BIN文件要比HEX和AXF文件小的多. ...

  2. 基于 Django2 实现邮箱注册登录功能

    1. 开发环境 Python 3.6.5 Django 2.2 2. 项目功能 用户登录 邮箱注册 图形验证码 找回密码 修改密码 用户退出 3. 项目创建 首先创建项目: django-admin ...

  3. 从统计局采集最新的省市区镇数据,用js在浏览器中运行 V2

    本文描述的是对国家统计局于2019-01-31发布的<2018年统计用区划代码和城乡划分代码(截止2018年10月31日)>的采集. 相对于用于和采集2016版.2017版的js代码做了比 ...

  4. 人生就像一条加速奔向死亡的贪吃蛇【winform版】

    群里聊天的时候,一个学妹说她在做贪吃蛇的小作业,于是昨晚(5.20无聊只好撸代码/(ㄒoㄒ)/~~)花了2个小时撸了一个出来,早上又花了些时间完善功能,就有了这个还算比较完善的版本,当然代码结构比较混 ...

  5. 关于function和task的说明

    1.  关于函数function调用,总结两个要点: 1.  函数调用一般产生一个值,这个值被赋值给某个变量 2.  函数所返回的值只能是一个,不可以是多个,不能像C语言中采用指针的方式返回多个值.因 ...

  6. AddRange 取代 Add

    cmd.Parameters的Add方法是增加一个参数,增加多个参数的的时候使用一个foreach循环,cmd.Parameters的AddRange方法是增加一个参数的数组. Add:将指定的对象添 ...

  7. 如何让vba与java的TripleDES算法通用

    本文链接:http://www.cnblogs.com/Charltsing/p/TripleDES.html 众所周知,java默认采用的TripleDES算法是ECB+PKCS#5填充方式.网上可 ...

  8. Python_计算文件夹大小

    计算文件夹大小 os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 os.path.join(path1[, path2[, ...]]) 将 ...

  9. Java对象的创建、内存布局和访问定位

    在Java运行时数据区中,我们知道了虚拟机内存的概况,本文介绍虚拟机内存中的数据的其它细节,如对象如何创建.如何布局以及如何访问. 基于实用的原则,这里以HotSpot虚拟机和常用的内存区域Java堆 ...

  10. docker技术之基本命令

    我们使用基本命令之前,先来普及一下操作中使用的基本概念 镜像   image 容器   container 仓库   repository 镜像 Docker 镜像是一个特殊的文件系统,除了提供容器运 ...