首页 > 其他分享 >【26.1】Django框架之settings配置

【26.1】Django框架之settings配置

时间:2024-04-07 18:34:35浏览次数:29  
标签:configure 配置文件 settings django import Django 26.1

【一】引言

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

【二】简述

  • settings.py文件本质上是一个Python模块,带有模块级别的变量。
  • 下面是一些示例设置:
ALLOWED_HOSTS = ['www.example.com']
DEBUG = False
DEFAULT_FROM_EMAIL = '[email protected]'
  • 注:当DEBUG为False时,必须设置ALLOWED_HOSTS的值。

  • 配置settings.py时:

    • 不允许出现Python层面的语法错误;

    • 可以使用普通的Python语法动态地设置,例如:MY_SETTING = [str(i) for i in range(30)]

    • 可以从其它设置文件导入值。

【三】指定配置文件启动项目

【1】引言

  • 当你使用Django时,你必须告诉它你要使用哪个配置文件来启动服务。
  • 也就是给环境变量DJANGO_SETTINGS_MODULE赋值。
  • 这个值要使用Python路径的语法,例如mysite.settings,而不是操作系统的文件路径语法。
  • 注意,被设置的配置文件应该在Python的导入查找路径中。
  • 默认情况下,我们是不需要设置这个变量的,直接启动项目就可以。
  • 但是,有时候需要使用别的配置启动项目。

【2】django-admin命令

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

(1)Unix/Linux/Mac系统

  • 例如在Unix Bash shell下:
# 声明Django配置文件的环境变量
export DJANGO_SETTINGS_MODULE=mysite.settings

# 启动Django项目
django-admin runserver

(2)Windows系统

  • 在Windows shell下,也就是cmd环境:
# 设置Django配置文件环境变量
set DJANGO_SETTINGS_MODULE=mysite.settings

# 启动Django
django-admin runserver

(3)直接指定启动参数

  • 使用--settings命令行参数可以手工指定:
# 在启动Django时配置参数
django-admin runserver --settings=mysite.settings

【3】服务器环境

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

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

【四】默认配置文件

【1】引言

  • Django的配置文件并不需要定义所有的选项,每个选项都有一个默认值,这些默认值位于django/conf/global_settings.py模块中。
  • 我们不要直接引用和修改这个文件,应该使用settings.py文件。

【2】配置文件加载顺序

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

有一个简单的方法可以查看当前有哪些设置与默认的设置不一样了

python manage.py diffsettings命令。

【五】在Django环境中使用settings

【1】使用 settings

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

if settings.DEBUG:
    # Do something

【2】注意

  • django.conf.settings不是一个模块,而是一个对象。
  • 所以不可以单独导入每个配置项:
from django.conf.settings import DEBUG  # 这是错误的做法

【六】配置文件操作

【1】不要在运行时更改设置

  • 请不要在Django项目运行时改变设置。
  • 例如,不要在视图中这样做:
from django.conf import settings

settings.DEBUG = True   # 不要这么做

【2】注意安全

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

【3】添加自己的配置项

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

    • 配置项名称必须全为大写。

    • 不要使用一个已经存在的设置

【4】使用configure方法

(1)使用场景

  • 在某些情况下,你可能希望绕过DJANGO_SETTINGS_MODULE环境变量,手动设定 Django 的配置项。

(2)使用方法

  • 为此,Django提供了settings.configure()方法:
from django.conf import settings

settings.configure(DEBUG=True)

(3)注意事项

  • configure() 可以设置任何配置项,每个参数对应一个值。
  • 参数名称必须大写,而且参数名必须是真实存在。
  • 没有在 configure() 中出现的设置项在随后用到时,仍会使用默认值。

(4)修改配置

  • 如果你并不想使用整个框架,仅仅使用其中一小部分时,如上述般配置 Django 是非常必要的。

  • 如果你想让默认值来自其它地方,而不是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模块。

【5】configure()DJANGO_SETTINGS_MODULE二者只能用一

(1)引言

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

  • 如果你没有设置DJANGO_SETTINGS_MODULE,也没有调用configure(),在首次调用配置文件时Django 将引发一个ImportError异常。

  • 也就是我们最常见的问题:

    • 为啥我启动不了Django?
    • 为什么我的脚本不能调用Django的功能?
    • 为什么我的代码无法链接到Django内部?
  • 如果你设置了DJANGO_SETTINGS_MODULE,并访问了一下设置,然后又调用configure(),Django 将引发一个RuntimeError异常,表示已经有配置,不要重复配置。

(2)解决方案

  • 有个属性正好可以用于这种情况,防止出现异常:
from django.conf import settings
if not settings.configured:
    settings.configure(myapp_defaults, DEBUG=True)

(3)总结

  • 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.setup()只能调用一次。

  • 尽量使用下面的方式,防止重复调用:

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

标签:configure,配置文件,settings,django,import,Django,26.1
From: https://www.cnblogs.com/dream-ze/p/18119659

相关文章

  • 【26.0】Django框架之settings源码
    【一】Django配置文件介绍Django框架默认提供给我们一个配置文件在我们项目根目录下的setting.py文件中,在里面我们可以看到很多的配置项并且我们能够自主的添加相应的配置但是其实这个文件只是Django暴露出来给我们的一个接口文件,在Django内部还存在一个更加强大的配置文件......
  • 【25.0】Django框架之auth模块
    【一】Auth模块引入我们在创建一个Django项目之后,直接执行数据库迁移命令会自动生成很多表django_sessionauth_userDjango在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且必须是管理员用户才能进入【二】创建超级用户(管理员)......
  • python计算机毕设【附源码】汉服文化管理系统(django+mysql+论文)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:汉服,作为中国古代汉族传统服饰的总称,承载了丰富的历史文化遗产和审美价值。近年来,随着国民文化自信心的提升和传统文化复兴的浪潮,汉服文化逐渐走进了公众的......
  • 【26.2】Django框架之settings核心配置项
    【一】前言【1】引言Django的默认配置文件中,包含上百条配置项目其中很多是我们‘一辈子’都不碰到或者不需要单独配置的这些项目在需要的时候再去查手册。【2】强调配置的默认值不是在settings.py文件中!不要以为settings.py中的配置值就是默认值,参考前文。settings.py......
  • Django单程序运行
    1、增加环境变量并且配置#确保运行在最model类之前importosimportdjangoos.environ.setdefault('DJANGO_SETTINGS_MODULE','SmsProject.settings')django.setup()2、如果使用Pycharm还需要做如下配置3、运行程序importosimportdjangoos.environ.setdefault(......
  • 物流系统django版本
    1,创建modelspyfromdjango.dbimportmodelsclassGoods(models.Model):  id=models.AutoField(primary_key=True)  name=models.CharField('货物名称',default='',max_length=50)  source=models.CharField('渠道',max_length=......
  • Java/Mysql数据库+django学生就业管理系统 24237(免费领源码)计算机毕业设计项目推荐上
    学生就业管理系统摘 要随着社会的快速发展和人们生活水平的不断提高,旅游已逐渐成为人们生活的重要组成部分,用户能够获取旅游信息的渠道也随信息技术的广泛应用而增加。大量未经过滤的信息在展示给用户的同时,也淹没了用户真正感兴趣的信息。为了方便用户快速定位自己感兴趣......
  • python计算机毕设【附源码】便利店收银管理系统(django+mysql+论文)
    本系统(程序+源码)带文档lw万字以上  文末可获取本课题的源码和程序系统程序文件列表系统的选题背景和意义选题背景:随着社会的发展和经济的进步,便利店作为一种新型的零售业态在城市中迅速崛起。便利店以其便捷的地理位置、丰富的商品种类和高效的服务赢得了消费者的青睐。......
  • Django框架之ORM操作
    一、选择数据库1、默认数据库Django默认的数据库是sqlite3数据库DATABASES={'default':{'ENGINE':'django.db.backends.sqlite3','NAME':BASE_DIR/'db.sqlite3',}}2、指定数据库修改连接到MySQL数据库DATABASES......
  • Django框架之请求生命周期流程图
    一、引言WSGI、wsgiref、uwsgi三者是什么关系?WSGI是协议,小写的wsgiref和uwsgi是实现该协议的功能模块缓存数据库提前已经将你想要的数据准备好了,需要的时候直接拿就可以,提高了效率和响应时间。eg:当你在修改你的数据的时候,你会发现数据并不是立刻修改完成的,而是需要经......