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:配置 Django的更多相关文章

  1. 第六章:Django 综合篇 - 15:Django与缓存

    我们都知道Django建立的是动态网站,正常情况下,每次请求过来都经历了这样一个过程: 接收请求 -> url路由 -> 视图处理 -> 数据库读写 -> 视图处理 -> ...

  2. 第六章:Django 综合篇 - 14:Django 日志

    Django使用Python内置的logging模块实现它自己的日志系统. 如果你没有使用过logging模块,请参考Python教程中的相关章节. 直达链接<logging模块详解>. ...

  3. Django基础-003 配置Django自带的后台管理,操作数据库

    插入测试数据,可以自己写页面来插入数据 也可以使用Django自带的后台管理,来操作数据表 1.创建用户 python manage.py createsuperuser 2.在浏览器输入地址,进入D ...

  4. Django项目基础配置和基本使用

    博文配置内容包括: django项目的创建 django项目下应用的创建及配置 数据库的配置 templates模板的配置 命令行创建项目: 在需要的目录下创建Django项目输入命令:django- ...

  5. 第六章:Django 综合篇 - 6:会话session

    因为因特网HTTP协议的特性,每一次来自于用户浏览器的请求(request)都是无状态的.独立的.通俗地说,就是无法保存用户状态,后台服务器根本就不知道当前请求和以前及以后请求是否来自同一用户.对于静 ...

  6. 第六章:Django 综合篇 - 16:Authentication

    Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. Django的认证系统包含了身份验证和权限管理两部分.简单地说,身份验证用于核实某个用户是否合法,权限管理 ...

  7. 第六章:Django 综合篇 - 3:使用MySQL数据库

    在实际生产环境,Django是不可能使用SQLite这种轻量级的基于文件的数据库作为生产数据库.一般较多的会选择MySQL. 下面介绍一下如何在Django中使用MySQL数据库. 一.安装MySQL ...

  8. 第六章:Django 综合篇 - 2:核心配置项

    Django的默认配置文件中,包含上百条配置项目,其中很多是我们'一辈子'都不碰到或者不需要单独配置的,这些项目在需要的时候再去查手册. 强调:配置的默认值不是在settings.py文件中!不要以为 ...

  9. 第六章:Django 综合篇 - 8:信号 signal

    django自带一套信号机制来帮助我们在框架的不同位置之间传递信息.也就是说,当某一事件发生时,信号系统可以允许一个或多个发送者(senders)将通知或信号(signals)发送给一组接受者(rec ...

随机推荐

  1. 【python】M3U8下载器脚本

    [python]M3U8下载器脚本 脚本目标: 1. 输入M3U8文件的链接,得到视频 2.使用异步操作,这样可以快很多,不加锁,因为懒得写,而且影响不大 已知条件: 1.m3u8文件其实就是一个记录 ...

  2. windows配置skywalking集群

    一.zookeeper 准备配置三个zookeeper,因为我是单台模拟,所以需要使用不同的端口,使用版本是apache-zookeeper-3.6.3-bin (必须是3.5+) 1.第1个zook ...

  3. 4-10 CS后台项目练习-3 || Redis

    13. 类别管理--根据id查询类别详情--持久层 13.1. 规划SQL语句 本次需要执行的SQL语句大致是: select * from pms_category where id=? 关于字段列 ...

  4. ansible概述、安装、模块介绍

    一.Ansible介绍 Ansible是一 个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩. 它融合了众多老牌运维工具的优点,Pubbet和Saltstack能实现的功 ...

  5. hive SQL 初学者题目,实战题目 字符串函数,日期拼接,开窗函数。。。。

    sql:Hive实现按照指定格式输出每七天的消费平均数输出格式:2018-06-01~2018-06-07 12.29...2018-08-10~2018-08-16 80.67 答案:-- 1.先将 ...

  6. “杀死” App 上的疑难崩溃

    在移动应用性能方面,崩溃带来的影响是最为严重的,程序崩了可以打断用户正在进行的操作体验,造成关键业务中断.用户留存率下降.品牌口碑变差.生命周期价值下降等影响.很多公司将崩溃率作为优先级最高的技术指标 ...

  7. 不是第七代的 Win 7

    贡献者:历史上的今天 Windows 7 是由微软公司(Microsoft)2009 年 10 月 22 日发布的桌面端操作系统,它影响了每个行业的方方面面,以至于很多人仍然在日常生活和工作中使用它. ...

  8. Apache DolphinScheduler新一代分布式工作流任务调度平台实战-上

    概述 定义 dolphinscheduler 官网地址 https://dolphinscheduler.apache.org/ dolphinscheduler GitHub地址 https://g ...

  9. YII http缓存

    http禁止缓存原理 header('Expires: 0'); header('Last-Modified: '. gmdate('D, d M Y H:i:s') . ' GMT'); heade ...

  10. Apache DolphinScheduler 是如何诞生的

    作者 | 代立冬,李岗 排版 | 开源之道小助理 Apache DolphinScheduler,简称"DS", 中文名 "小海豚调度"(海豚聪明.人性化,又左 ...