开发者社区> apachecn_飞龙> 正文

django 1.8 官方文档翻译: 6-1-1 Django 的设置

简介: Django 的设置 Django 的设置文件包含你安装的Django 的所有配置。这页文档解释设置是如何工作以及有哪些设置。
+关注继续查看

Django 的设置

Django 的设置文件包含你安装的Django 的所有配置。这页文档解释设置是如何工作以及有哪些设置。

基础

设置文件只是一个Python 模块,带有模块级别的变量。

下面是一些示例设置:

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

如果你设置DEBUGFalse,那么你应该正确设置ALLOWED_HOSTS 的值。

因为设置文件是一个Python 模块,所以适用以下情况:

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

指定设置文件

DJANGO_SETTINGS_MODULE

当你使用Django 时,你必须告诉它你正在使用哪个设置。这可以使用环境变量DJANGO_SETTINGS_MODULE 来实现。

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):

set DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver

使用–settings 命令行参数可以手工指定设置:

django-admin runserver --settings=mysite.settings

在服务器上(mod_wsgi)

在线上服务器环境中,你需要告诉WSGI 的application 使用哪个设置文件。可以使用os.environ 实现:

import os

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

阅读Django mod_wsgi 文档 以获得关于Django WSGI application 的更多和其它常见信息。

默认的设置

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

下面是Django 用来编译设置的算法:

  • global_settings.py 中加载设置。
  • 从指定的设置文件中加载设置,如有必要则覆盖全局的设置。

注意,设置文件不 应该从global_settings 中导入,因为这是多余的。

查看改变的设置

有一个简单的方法可以查看哪些设置与默认的设置不一样了。python manage.py diffsettings 命令显示当前的设置文件和Django 默认设置之间的差异。

获取更多信息,查看diffsettings 的文档。

在Python 代码中使用设置

在Django 应用中,可以通过导入django.conf.settings 对象来使用设置。例如:

from django.conf import settings

if settings.DEBUG:
    # Do something

注意,django.conf.settings 不是一个模块 —— 它是一个对象。所以不可以导入每个单独的设置:

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

还要注意,你的代码不应该 从global_settings 或你自己的设置文件中导入。django.conf.settings 抽象出默认设置和站点特定设置的概念;它表示一个单一的接口。它还可以将代码从你的设置所在的位置解耦出来。

运行时改变设置

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

from django.conf import settings

settings.DEBUG = True   # Don't do this!

给设置赋值的唯一地方是在设置文件中。

安全

因为设置文件包含敏感的信息,例如数据库密码,你应该尽一切可能来限制对它的访问。例如,修改它的文件权限使得只有你和Web 服务器使用者可以读取它。这在共享主机的环境中特别重要。

可用的设置

完整的可用设置清单,请参见设置参考

创建你自己的设置

没有什么可以阻止你为自己的Django 应用创建自己的设置。只需要遵循下面的一些惯例:

  • 设置名称全部是大写
  • 不要使用一个已经存在的设置

对于序列类型的设置,Django 自己使用元组而不是列表,但这只是一个习惯。

不用DJANGO_SETTINGS_MODULE 设置

有些情况下,你可能想绕开DJANGO_SETTINGS_MODULE 环境变量。例如,如果你正在使用自己的模板系统,而你不想建立指向设置模块的环境变量。

这些情况下,你可以手工配置Django 的设置。实现这点可以通过调用:

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

例如:

from django.conf import settings

settings.configure(DEBUG=True)

可以传递configure() 给任意多的关键字参数,每个关键字参数表示一个设置及其值。每个参数的名称应该都是大写,与上面讲到的设置名称相同。如果某个设置没有传递给configure() 而且在后面需要使用到它,Django 将使用其默认设置的值。

当你在一个更大的应用中使用到Django 框架的一部分,有必要以这种方式配置Django —— 而且实际上推荐这么做。

所以,当通过settings.configure() 配置时,Django 不会对进程的环境变量做任何修改(参见TIME_ZONE 文档以了解为什么会发生)。在这些情况下,它假设你已经完全控制你的环境变量。

自定义默认的设置

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

在下面的示例中,默认的设置来自myapp_defaults, 并且设置DEBUGTrue,而不论它在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_SETTINGS_MODULE,并访问了一下设置,然后 调用configure(),Django 将引发一个RuntimeError 表示该设置已经有配置。有个属性正好可以用于这个情况:

例如:

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

另外,多次调用configure()或者在设置已经访问过之后调用 configure() 都是错误的。

归结为一点:只使用configure()DJANGO_SETTINGS_MODULE 中的一个。不可以两个都用和都不用。

另见

设置参考
包含完整的核心设置和contrib 应用设置的列表。

译者:Django 文档协作翻译小组,原文:Overview

本文以 CC BY-NC-SA 3.0 协议发布,转载请保留作者署名和文章出处。

Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。交流群:467338606。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Word 技术篇-文档中不同级别标题自动重新编号设置方法,论文多级编号演示
Word 技术篇-文档中不同级别标题自动重新编号设置方法,论文多级编号演示
155 0
django 1.8 官方文档翻译:13-6 分页
分页 Django提供了一些类来帮助你管理分页的数据 – 也就是说,数据被分在不同页面中,并带有“上一页/下一页”标签。这些类位于django/core/paginator.py中。
790 0
django 1.8 官方文档翻译:5-2-2 表单素材 ( Media 类)
表单素材 ( Media 类) 渲染有吸引力的、易于使用的web表单不仅仅需要HTML – 同时也需要CSS样式表,并且,如果你打算使用奇妙的web2.0组件,你也需要在每个页面包含一些JavaScript。
800 0
转一篇NGINX+UWSGI+PYTHON+DJANGO部署文档
高远弄的,,专业,明晓。。感谢哈哈。   http://blog.csdn.net/tmpbook/article/details/42873667
1088 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
20368 0
Linux(RHEL4)中ftp的设置暨530错误的解决方法
         在windows上使用ftp命令登录Linux服务器时总是提示:530 Must perform authentication before identifying USER。明明在服务器已经建立了test用户,但是使用该用户登录时,却不能成功,但是从Linux的日志可以看到已经连接上服务器,但是并没有登录成功。
802 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
18646 0
django 1.8 官方文档翻译:13-12 验证器
验证器 编写验证器 验证器是一个可调用的对象,它接受一个值,并在不符合一些规则时抛出ValidationError异常。
1048 0
django 1.8 官方文档翻译:4-2-1 Django模版语言
Django模版语言 本文将介绍Django模版系统的语法。如果您需要更多该系统如何工作的技术细节,以及希望扩展它,请浏览 The Django template language: for Python programmers. Django模版语言的设计致力于在性能和简单上取得平衡。
1021 0
+关注
apachecn_飞龙
Github:@wizardforcel 简书:@ApacheCN_飞龙 微博:@龙雀 CSDN:@wizardforcel ApacheCN 官网:apachecn.org 机器学习交流群:629470233
719
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载