{"title":"Django 配置","version":"5.1","locale":"zh-hans","docname":"topics/settings","url":"/zh-hans/5.1/topics/settings/","canonical":"https://djangodocs.dev/zh-hans/5.1/topics/settings/","summary":"Django 的配置文件包含 Django 应用的所有配置项。本文档介绍配置是如何生效的，以及哪些设置项是可配置的。 基础 Link to this heading # 配置文件只是一个使用模块级变量的一个 Python 模块。 一组配置例子: Code Copy ALLOWED_HOSTS = […","html":"<h1>Django 配置<a class=\"heading-anchor\" href=\"#django-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Django 的配置文件包含 Django 应用的所有配置项。本文档介绍配置是如何生效的，以及哪些设置项是可配置的。</p>\n<section id=\"the-basics\">\n<h2>基础<a class=\"heading-anchor\" href=\"#the-basics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>配置文件只是一个使用模块级变量的一个 Python 模块。</p>\n<p>一组配置例子:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">ALLOWED_HOSTS</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s2\">&quot;www.example.com&quot;</span><span class=\"p\">]</span>\n<span class=\"n\">DEBUG</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n<span class=\"n\">DEFAULT_FROM_EMAIL</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;webmaster@example.com&quot;</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>如果你将 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>，同时你需要正确的设置 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">ALLOWED_HOSTS</span></code></a>。</p>\n</aside>\n<p>因为配置文件是一个 Python 模块，所以要注意以下几项:</p>\n<ul>\n<li><p>不能有 Python 语法错误</p></li>\n<li><p>可以用 Python 语法实现动态配置，例如:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">MY_SETTING</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">i</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">30</span><span class=\"p\">)]</span>\n</code></pre></div>\n</li>\n<li><p>可以从其他配置文件中引入变量</p></li>\n</ul>\n</section>\n<section id=\"designating-the-settings\">\n<span id=\"django-settings-module\"></span><h2>指定配置文件<a class=\"heading-anchor\" href=\"#designating-the-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"std envvar\">\n<dt class=\"sig sig-object std\" id=\"envvar-DJANGO_SETTINGS_MODULE\">\n<span class=\"sig-name descname\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></span><a class=\"heading-anchor\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>当你使用 Django 的时候，你必须告诉它你正在使用哪些设置。通过使用环境变量 <span class=\"target\" id=\"index-20\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> 来实现。</p>\n<p><span class=\"target\" id=\"index-21\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> 的值是一个符合 Python 语法的路径，例如 <code class=\"docutils literal notranslate\"><span class=\"pre\">mysite.settings</span></code>。要注意配置模块应位于 Python 的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/sys.html#sys.path\" title=\"(in Python v3.14)\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">sys.path</span></code></a> 中。</p>\n<section id=\"the-django-admin-utility\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">django-admin</span></code> 工具<a class=\"heading-anchor\" href=\"#the-django-admin-utility\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>使用 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/django-admin/\"><span class=\"doc\">django-admin</span></a> 时，你可以一次性设定环境变量，也可以在运行此工具时，显式地传入配置模块。</p>\n<p>示例（Unix Bash shell）：</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"nb\">export</span><span class=\"w\"> </span><span class=\"nv\">DJANGO_SETTINGS_MODULE</span><span class=\"o\">=</span>mysite.settings\ndjango-admin<span class=\"w\"> </span>runserver\n</code></pre></div>\n<p>示例（Windows shell）：</p>\n<div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows code\"><code><span class=\"go\">set DJANGO_SETTINGS_MODULE=mysite.settings</span>\n<span class=\"go\">django-admin runserver</span>\n</code></pre></div>\n<p>使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">--settings</span></code> 命令行参数手动指定设置：</p>\n<div class=\"code-block\" data-language=\"shell\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code>django-admin<span class=\"w\"> </span>runserver<span class=\"w\"> </span>--settings<span class=\"o\">=</span>mysite.settings\n</code></pre></div>\n</section>\n<section id=\"on-the-server-mod-wsgi\">\n<h3>服务器端 (<code class=\"docutils literal notranslate\"><span class=\"pre\">mode_wsgi</span></code>)<a class=\"heading-anchor\" href=\"#on-the-server-mod-wsgi\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>在服务器环境下，要通知WSGI应用当前使用的是哪个配置文件，用到 <code class=\"docutils literal notranslate\"><span class=\"pre\">os.environ</span></code>:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">os</span>\n\n<span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">environ</span><span class=\"p\">[</span><span class=\"s2\">&quot;DJANGO_SETTINGS_MODULE&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;mysite.settings&quot;</span>\n</code></pre></div>\n<p>阅读 <a class=\"reference internal\" href=\"/zh-hans/5.1/howto/deployment/wsgi/modwsgi/\"><span class=\"doc\">Django mod_wsgi 文档</span></a> 了解更多关于 Django WSGI 应用的信息和常见设置。</p>\n</section>\n</section>\n<section id=\"default-settings\">\n<h2>默认配置<a class=\"heading-anchor\" href=\"#default-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django 的设置文件如果不需要的话，不必定义任何设置。每个设置都有一个合理的默认值。这些默认值存储在模块 <a class=\"extlink-source reference external\" href=\"https://github.com/django/django/blob/stable/5.1.x/django/conf/global_settings.py\">django/conf/global_settings.py</a> 中。</p>\n<p>Django按如下算法编译配置模块:</p>\n<ul class=\"simple\">\n<li><p>从 <code class=\"docutils literal notranslate\"><span class=\"pre\">global_settings.py</span></code> 中加载配置项。</p></li>\n<li><p>从指定的配置文件中加载配置项，覆盖对应的全局配置项。</p></li>\n</ul>\n<p>注意: 配置文件中不要再重复引用 <code class=\"docutils literal notranslate\"><span class=\"pre\">global_settings</span></code>，因为这样做是多余的。</p>\n<section id=\"seeing-which-settings-you-ve-changed\">\n<h3>查看你已经更改了哪个配置项<a class=\"heading-anchor\" href=\"#seeing-which-settings-you-ve-changed\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>命令 <code class=\"docutils literal notranslate\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">diffsettings</span></code> 显示当前配置文件与 Django 默认配置的差异。</p>\n<p>想了解更多, 可以查看 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/django-admin/#django-admin-diffsettings\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">diffsettings</span></code></a> 文档.</p>\n</section>\n</section>\n<section id=\"using-settings-in-python-code\">\n<h2>在 Python 代码中使用 settings<a class=\"heading-anchor\" href=\"#using-settings-in-python-code\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>在具体的Django应用中, 通过引入 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings</span></code> 使用配置, 例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n\n<span class=\"k\">if</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DEBUG</span><span class=\"p\">:</span>\n    <span class=\"c1\"># Do something</span>\n    <span class=\"o\">...</span>\n</code></pre></div>\n<p>注意 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings</span></code> 并不是一个模块！-- 而是一个对象！所以引入某个单独的设置项是不可能的:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf.settings</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">DEBUG</span>  <span class=\"c1\"># This won&#39;t work.</span>\n</code></pre></div>\n<p>还要注意 <em>不应该</em> 直接引入 <code class=\"docutils literal notranslate\"><span class=\"pre\">global_settings</span></code> 和你自己的配置文件。 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings</span></code> 整合了默认配置和网站指定配置，从而只提供一个接口读取配置。它也解耦了使用自定义配置文件的代码。</p>\n</section>\n<section id=\"altering-settings-at-runtime\">\n<h2>运行时更改设置<a class=\"heading-anchor\" href=\"#altering-settings-at-runtime\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>不建议在运行时更改设置. 比如, 不要在view中这样用:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n\n<span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DEBUG</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>  <span class=\"c1\"># Don&#39;t do this!</span>\n</code></pre></div>\n<p>应该只在 settings 文件中更改设置。</p>\n</section>\n<section id=\"security\">\n<h2>安全<a class=\"heading-anchor\" href=\"#security\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>由于配置文件包含敏感信息, 比如数据库密码, 所以应该限制对配置文件的访问. 比如更改文件权限, 从而只能令你和你的Web服务器能读取配置文件. 这在共享主机的环境中非常重要!</p>\n</section>\n<section id=\"available-settings\">\n<h2>可用的配置项<a class=\"heading-anchor\" href=\"#available-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>查看 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/\"><span class=\"doc\">settings 参考</span></a> 了解完整的配置项列表。</p>\n</section>\n<section id=\"creating-your-own-settings\">\n<h2>创建你自己的配置文件<a class=\"heading-anchor\" href=\"#creating-your-own-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>没有什么可以阻止你为你的的 Django 应用创建自己的配置，但请遵循以下原则：</p>\n<ul class=\"simple\">\n<li><p>所有配置项名称都应大写。</p></li>\n<li><p>不要重新设置已存在的配置项。</p></li>\n</ul>\n<p>由于配置文件是序列化的，Django 使用列表，但仅是约定俗成。</p>\n</section>\n<section id=\"using-settings-without-setting-django-settings-module\">\n<span id=\"settings-without-django-settings-module\"></span><h2>不设置 <span class=\"target\" id=\"index-12\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> 时使用配置<a class=\"heading-anchor\" href=\"#using-settings-without-setting-django-settings-module\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>在某些情况下，你可能希望绕过：<span class=\"target\" id=\"index-22\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> 环境变量。例如，如果你单独使用模板系统，则可能不需要设置指向配置模块的环境变量。</p>\n<p>在这种情况下，可以手动设定 Django 的配置项。要用到下面这个方法:</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.conf.settings.configure\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.conf.settings.</span></span><span class=\"sig-name descname\"><span class=\"pre\">configure</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">default_settings</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">settings</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.conf.settings.configure\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>举例：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n\n<span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">configure</span><span class=\"p\">(</span><span class=\"n\">DEBUG</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>通过 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code> 可以设置任何配置项，每个参数对应一个值。参数名称必须大写，而且参数名必须是真实存在。没有在 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code> 中出现的设置项在随后用到时，仍会使用默认值。</p>\n<p>如果你并不想使用整个框架，仅仅是其中一小部分时，如上述这般配置 Django 是非常必要的。事实上，我们建议您这样做。</p>\n<p>因此，通过 <code class=\"docutils literal notranslate\"><span class=\"pre\">settings.configure()</span></code> 配置 Django 时，并不会对当前进程的环境变量做任何修改。（可以查看 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-TIME_ZONE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">TIME_ZONE</span></code></a> 了解为什么要这么做）。这意味着在上述情况下你仍然完全掌控着当前环境。</p>\n<section id=\"custom-default-settings\">\n<h3>定制默认配置项<a class=\"heading-anchor\" href=\"#custom-default-settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>如果你实在不想使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.global_settings</span></code>，而想自定义配置默认值，你可以在调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code> 时使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">default_settings</span></code> 参数（或是默认做为第一个参数传入）。该参数是一个提供默认值的模块或是类。</p>\n<p>在下面这个例子中，由 <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp_defaults</span></code> 提供默认值，并令 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 被置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> 而不是从 <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp_defaults</span></code> 中获取:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">myapp_defaults</span>\n\n<span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">configure</span><span class=\"p\">(</span><span class=\"n\">default_settings</span><span class=\"o\">=</span><span class=\"n\">myapp_defaults</span><span class=\"p\">,</span> <span class=\"n\">DEBUG</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>接下来例子使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">myapp_defaults</span></code> 做为一个位置参数，这和上面的效果是等同的:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">configure</span><span class=\"p\">(</span><span class=\"n\">myapp_defaults</span><span class=\"p\">,</span> <span class=\"n\">DEBUG</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>通常情况下，你不需要以这种方式覆盖默认值。Django 的默认值足够安全，你可以放心使用它们。请注意，如果你传递了一个新的默认模块，它将完全 <em>替换</em> 掉 Django 的默认值，因此你必须为在导入的代码中可能使用的每个可能的设置指定一个值。在 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.conf.settings.global_settings</span></code> 中查看完整的列表。</p>\n</section>\n<section id=\"either-configure-or-django-settings-module-is-required\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code> 或 <span class=\"target\" id=\"index-14\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> 二者必用其一<a class=\"heading-anchor\" href=\"#either-configure-or-django-settings-module-is-required\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>如果你没有设置  <span class=\"target\" id=\"index-23\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> 环境变量，就 <em>必须</em> 在运行读取配置项的代码之前调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code>。</p>\n<p>如果你没有设置 <span class=\"target\" id=\"index-24\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> 也没有调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code>，那么 Django 会在第一次访问配置项时抛出 <code class=\"docutils literal notranslate\"><span class=\"pre\">ImportError</span></code> 异常。</p>\n<p>如果设置了 <span class=\"target\" id=\"index-25\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a>，以某种方式访问配置的值，<em>再</em> 调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code> 的话，Django 将会抛出一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">RuntimeError</span></code> 异常，表明已经设置了配置。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.conf.settings.configured\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">django.conf.settings.</span></span><span class=\"sig-name descname\"><span class=\"pre\">configured</span></span><a class=\"heading-anchor\" href=\"#django.conf.settings.configured\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>例如：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n\n<span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">configured</span><span class=\"p\">:</span>\n    <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">configure</span><span class=\"p\">(</span><span class=\"n\">myapp_defaults</span><span class=\"p\">,</span> <span class=\"n\">DEBUG</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>重复调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code> 或是在访问任何一个配置项后再调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code>，也会引起错误。</p>\n<p>这意味着：确保要使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code> 或 <span class=\"target\" id=\"index-26\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> 其中一个，不要多，也不要少。</p>\n</section>\n<section id=\"calling-django-setup-is-required-for-standalone-django-usage\">\n<h3>“独立的” Django 应用要求调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code><a class=\"heading-anchor\" href=\"#calling-django-setup-is-required-for-standalone-django-usage\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>如果你使用了“独立” Django 的组件——比如，编写一个 Python 脚本，它加载了一些 Django 模板并渲染了它们，或使用 ORM 获取数据——你需要额外的配置一下设置文件。</p>\n<p>在你已经配置 <span class=\"target\" id=\"index-27\"></span><a class=\"reference internal\" href=\"#envvar-DJANGO_SETTINGS_MODULE\"><code class=\"xref std std-envvar docutils literal notranslate\"><span class=\"pre\">DJANGO_SETTINGS_MODULE</span></code></a> 或调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">configure()</span></code> 后，你需要调用 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/applications/#django.setup\" title=\"django.setup\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code></a> 来加载你的设置，并填写的 Django 的应用注册表。例子:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">django</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">myapp_defaults</span>\n\n<span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">configure</span><span class=\"p\">(</span><span class=\"n\">default_settings</span><span class=\"o\">=</span><span class=\"n\">myapp_defaults</span><span class=\"p\">,</span> <span class=\"n\">DEBUG</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"n\">django</span><span class=\"o\">.</span><span class=\"n\">setup</span><span class=\"p\">()</span>\n\n<span class=\"c1\"># Now this script or any imported module can use any part of Django it needs.</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">myapp</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">models</span>\n</code></pre></div>\n<p>注意，仅在你的代码是真的独立的情况下调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code>。当被你的 Web 服务器调用时，或通过 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/django-admin/\"><span class=\"doc\">django-admin</span></a> 调用，Django 会帮你处理这些。</p>\n<aside class=\"admonition-django-setup-may-only-be-called-once admonition\">\n<p class=\"admonition-title\"><code class=\"docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code> 只需调用一次。</p>\n<p>因此，避免将可服用的应用逻辑代码放入独立脚本中。是故，你必须在你的应用中从此脚本中导入。若你无法避免这样做，将 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.setup()</span></code> 调用至于 <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span></code> 块内:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">if</span> <span class=\"vm\">__name__</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;__main__&quot;</span><span class=\"p\">:</span>\n    <span class=\"kn\">import</span><span class=\"w\"> </span><span class=\"nn\">django</span>\n\n    <span class=\"n\">django</span><span class=\"o\">.</span><span class=\"n\">setup</span><span class=\"p\">()</span>\n</code></pre></div>\n</aside>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">See also</p>\n<dl class=\"simple\">\n<dt><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/\"><span class=\"doc\">配置参考</span></a></dt><dd><p>包含对于 core 和 contrib 的完整应用配置列表。</p>\n</dd>\n</dl>\n</aside>\n</section>\n</section>","rootId":"django-settings","toc":[{"title":"基础","anchor":"the-basics","children":[]},{"title":"指定配置文件","anchor":"designating-the-settings","children":[{"title":"django-admin 工具","anchor":"the-django-admin-utility","children":[]},{"title":"服务器端 (mode_wsgi)","anchor":"on-the-server-mod-wsgi","children":[]}]},{"title":"默认配置","anchor":"default-settings","children":[{"title":"查看你已经更改了哪个配置项","anchor":"seeing-which-settings-you-ve-changed","children":[]}]},{"title":"在 Python 代码中使用 settings","anchor":"using-settings-in-python-code","children":[]},{"title":"运行时更改设置","anchor":"altering-settings-at-runtime","children":[]},{"title":"安全","anchor":"security","children":[]},{"title":"可用的配置项","anchor":"available-settings","children":[]},{"title":"创建你自己的配置文件","anchor":"creating-your-own-settings","children":[]},{"title":"不设置 DJANGO_SETTINGS_MODULE 时使用配置","anchor":"using-settings-without-setting-django-settings-module","children":[{"title":"定制默认配置项","anchor":"custom-default-settings","children":[]},{"title":"configure() 或 DJANGO_SETTINGS_MODULE 二者必用其一","anchor":"either-configure-or-django-settings-module-is-required","children":[]},{"title":"“独立的” Django 应用要求调用 django.setup()","anchor":"calling-django-setup-is-required-for-standalone-django-usage","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"使用 Django","url":"/zh-hans/5.1/topics/"}],"prev":{"docname":"topics/serialization","title":"序列化 Django 对象","url":"/zh-hans/5.1/topics/serialization/"},"next":{"docname":"topics/signals","title":"信号","url":"/zh-hans/5.1/topics/signals/"},"formats":{"html":"/zh-hans/5.1/topics/settings/","markdown":"/zh-hans/5.1/topics/settings.md","json":"/zh-hans/5.1/topics/settings.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/topics/settings.txt","official":"https://docs.djangoproject.com/zh-hans/5.1/topics/settings/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}