配置 Django
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加载配置的顺序是这样的:
- 从
global_settings.py
中加载默认配置; - 从指定的配置文件中加载(通常是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的更多相关文章
- centos7 apache httpd安装和配置django项目
一.安装httpd服务 apache在centos7中是Apache HTTP server.如下对httpd的解释就是Apache HTTP Server.所以想安装apache其实是要安装http ...
- django 配置 Django
Django项目的设置文件位于项目同名目录下,名叫settings.py.这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证. 一.简述 settings.py文件本质上是一个 ...
- Django基础学习七之如何配置django+mysql
很久没有更新博客了,也有段时间没有持续性的学习了,感觉堕落了,今天继续开始学习吧 今天主要来学习一下在django下配置mysql的数据库和使用admin用户管理数据库 1.在project中的set ...
- pycharm中配置Django运行环境(包括run manage.py task)
1.特别注意Environment variables(环境变量)的配置 DJANGO_SETTINGS_MODULE=(项目名).settings 如: DJANGO_SETTINGS_MODULE ...
- 安装配置Django
安装配置Django 以下是基于python3.5 pip install Django 把python环境目录Scripts配置到环境变量,主要在命令行中随时可以使用django-admin 验证 ...
- 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 ...
- 第六章:Django 综合篇 - 1:配置 Django
Django项目的设置文件位于项目同名目录下,名叫settings.py.这个模块,集合了整个项目方方面面的设置属性,是项目启动和提供服务的根本保证. 一.简述 settings.py文件本质上是一个 ...
- pycharm快捷键、配置virtualenv环境,配置django调试,配置远程调试
pycharm安装和首次使用 http://blog.csdn.net/chenggong2dm/article/details/9365437 快捷键: 找文件.代码.引用相关 1.双击shift ...
- CentOS 6 安装 Python3.5以及配置Django
http://www.jianshu.com/p/6199b5c26725 文/FiveStrong(简书作者)原文链接:http://www.jianshu.com/p/6199b5c26725著作 ...
随机推荐
- Java多线程编程核心技术(三)多线程通信
线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体.线程间的通信就是成为整体的必用方案之一,可以说,使线程间进行通信后,系统之间的交互性会更强大,在大大提高CPU利用率的同时 ...
- 支持异步同步的分布式CommandBus MSMQ实现 - 支持Session传递、多实例处理
先上一张本文所描述的适用场景图 分布式场景,共3台server: 前端Server Order App Server Warehouse App Server 功能: 前端Server可以不停的发送C ...
- A2D JS框架 - DES加密解密 与 Cookie的封装(C#与js互相加密解密)
这次实现了JS端的DES加密与解密,并且C#端也能正确解析DES的密文(反之也实现了) 使用的代码如下,非常方便: <script src="A2D.js" type=&qu ...
- zookeeper核心-zab协议-《每日五分钟搞定大数据》
上篇文章<paxos与一致性>说到zab是在paxos的基础上做了重要的改造,解决了一系列的问题,这一篇我们就来说下这个zab. zab协议的全称是ZooKeeper Atomic Bro ...
- js、jquery实现放大镜效果
在一些电商网站的商品详情页面,都会有放大镜效果,实现起来并不是很困难,今天用了两个小时,写了一个放大镜效果的实例,来分享给大家! 实现的效果大概是这个样子的 预览 先来看一下效果吧,点击下面的链接预览 ...
- 《React Native 精解与实战》书籍连载「React 与 React Native 简介」
此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...
- 2018 Multi-University Training Contest 1
比赛链接:2018 Multi-University Training Contest 1 6301 Distinct Values 题意:输出一个长度为n的序列,要求满足m个区间的数都不相同,并且字 ...
- Effective java ---遵守普遍接受的命名规则
alibaba的java命名规范如下: . [强制]代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束. 反例: _name / __name / $Object / name_ ...
- Maven安装与环境配置(Windows)
1.下载安装包 在Maven官网下载最新版的安装包:http://maven.apache.org/download.cgi 2.解压安装包 3.配置Maven环境变量 配置M2_HOME环境变量,指 ...
- IOS - UTF-8转码问题
2016.07.06 21:45* 字数 61 阅读 921评论 0喜欢 2 IOS中提供的转码. [utf8str stringByAddingPercentEscapesUsingEncoding ...