乐趣区

关于python:Django笔记三十九之settings配置介绍

这一篇笔记介绍 Django 里 settings.py 里一些罕用的配置项,这些配置有一些是在之前的笔记中有过介绍的,比方 logging 的日志配置,session 的会话配置等,这里就只做一下简略的回顾,有一些是之前没有介绍过的就着重介绍一下。

以下是本篇笔记目录:

  1. 邮箱配置
  2. 容许拜访地址配置
  3. 数据库配置
  4. 调试模式配置
  5. 注册应用程序配置
  6. 时区工夫配置
  7. 会话配置
  8. 其余配置

1、邮箱配置

在前一篇笔记发送邮件的介绍中,有过具体的介绍,比方 EMAIL_BACKEND,EMAIL_HOST 等,这里额定再介绍一个参数 ADMINS

这个参数其实在第三十篇笔记 log 日志记录中有过介绍,当咱们设置的日志发送邮件模块有指定等级的日志产生时,会将邮件发送至 ADMINS 中定义的收件人列表。

这个参数是一个列表,每个元素也是一个元组或列表,第一个参数为收件人的名称,第二个为收件人邮箱:

ADMINS = [("Hunter", "120460xxx@qq.com"),
]

2、容许拜访地址配置

咱们的零碎是能够设置容许拜访的地址的,能够设置域名或者 IP,比方:

ALLOWED_HOSTS = ["192.168.1.9"]

这个参数的默认值为空列表,则阐明只容许该零碎所在的服务器地址的其余服务能够拜访到 Django 服务。

如果想设置所有地址都能够拜访到咱们的服务,能够如此设置:

ALLOWED_HOSTS = ["*"]

3、数据库配置

后面连贯数据库的时候,没有做过多的介绍,都是间接应用,这里再做一下具体的介绍,以下是一个示例:

DATABASES = {
    'default': {
        'ENGINE': "django.db.backends.mysql",
        "HOST": "192.168.1.31",
        'NAME': "func_test",
        "USER": "root",
        "PASSWORD": "123456",
        "PORT": 3306,
        "OPTIONS": {},
        "TEST": {},},
}

在 DATABASES 中,必须设置一个 default 数据库,也能够在外面增加其余数据库连贯,比方之前的多数据库连贯操作的笔记示例

其中,ENGINE 示意连贯的数据库类型,这里咱们设置的是 MySQL,也能够设置成 postgresql,oracle,sqlite3。

这里咱们连贯应用的都是 MySQL,所以上面的配置项都是基于 MySQL 做的介绍。

HOST 示意连贯数据库的主机

NAME 示意要应用的数据库名称,比方咱们这里 MySQL 的 func_test。如果应用的是 SQLite,那么这个地址应该是一个残缺门路,上面是一个应用 SQLite 作为数据库的示例:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': '/Users/hunter/…/sqlite3.db'
    }
}

USER 示意的是连贯 MySQL 用到的用户名

PASSWORD 则是明码

PORT MySQL 个别是 3306,如果是映射的其余端口改成其余端口即可

CONN_MAX_AGE

还有一个参数为 CONN_MAX_AGE,示意一个数据库连贯的寿命,以秒为整数,默认为 0,示意每次数据库申请完结之后即敞开数据库连贯。

如果设置为 60,那么数据库连贯在开启之后 60s 即敞开此连贯,在此期间,其余申请能够复用此连贯。

如果设置为 None,则示意始终处于连贯状态。

OPTIONS

是用于增加连贯数据库时额定的参数,比方咱们的 MySQL 的连贯配置不间接在 DATABASES 中定义,而是通过配置文件的形式应用,如下官网文档的一个应用示例:

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {'read_default_file': '/path/to/my.cnf',},
    }
}


# my.cnf
[client]
database = NAME
user = USER
password = PASSWORD
default-character-set = utf8

这里的意思是,DATABASES 里的 default 数据库连贯应用的都是 my.cnf 里的配置选项

如果同时咱们在 DATABASES[“default”] 中也配置了 NAME,USER,PASSWORD 等参数,连贯应该以哪个为准呢?

是以 OPTIONS 里的参数为准,这里默认的读取配置程序是 OPTIONS > NAME, USER, PASSWORD, HOST, PORT

咱们还能够在 OPTIONS 里设置数据库的隔离等级:

* 'read uncommitted' 读未提交
* 'read committed' 读已提交
* 'repeatable read' 可反复读
* 'serializable' 串行化 

TEST

TEST 参数默认也是一个空 dict,之前在单元测试那篇笔记中有过介绍,能够设置测试数据库的字符集编码,指定测试数据库名称等信息,示例如下:

DATABASES = {
    'default': {
        ...
        "TEST": {
            "CHARSET": "utf8",
            "NAME": "test_default_db",
        },
    }
}

4、调试模式配置

咱们通过 settings 中的 DEBUG 参数来管制 Django 零碎是否处于调试模式,DEBUG=True 则示意零碎处于调试模式。

留神 :永远不要在 DEBUG=True 的状况下将网站部署到生产环境

调试模式的次要性能之一就是显示具体的谬误页面,比方在 DEBUG=True 的状况下,如果咱们的接口产生异样,Django 会显示一个具体的回溯,比方上面的信息:

而如果咱们设置 DEBUG=False,显示的信息就会如下:

返回给前台的就是一个简略的谬误页面,而不是像下面一样暴露出具体的文件门路和错误信息

5、注册应用程序配置

INSTALLED_APPS,列表参数,元素是在这个 Django 零碎中被启用的应用程序。

这个参数蕴含了 Django 零碎初始化时候的一些配置类应用程序,比方 django.contrib.admin, django.contrib.sessions 等

也蕴含咱们创立的 application,比方咱们创立了一个名为 blog 的 application,就能够在其中增加 ‘blog.apps.BlogConfig’ 才能够被零碎检测到

6、时区工夫配置

时区的设置与 settings.py 里的两个参数相干,一个是 TIME_ZONE,一个是 USE_TZ

TIME_ZONE 示意是时区,USE_TZ 示意是否默认是应用时区感知

咱们获取以后工夫有两个形式,一个是通过 datetime,一个是通过 django.utils.timezone 获取:

import datetime
print(datetime.datetime.now())

from django.utils import timezone
print(timezone.now())

如果设置 USE_TZ = True,不论 TIME_ZONE 设置的时区是哪个,timezone.now() 输入的永远是 UTC 工夫,也就是格林威治工夫,也就是比咱们当初要早八个小时的工夫

而 datetime.datetime.now() 则是会依据 TIME_ZONE 设置的时区显示工夫,比方设置为“Ameraica/Chicago”则会比格林威治工夫早六个小时,比咱们以后工夫早 14 个小时

然而咱们存储到数据库的工夫是应用 timezone 的工夫的,所以这个设置不太对的。

如果想要存储到数据库的工夫和咱们本地的工夫统一,咱们须要设置 USE_TZ 为 False,且设置 TIME_ZONE 的值为咱们以后时区东八区的时区,这样,这两个输入的工夫值就统一了,且数据库中存储的值也是与咱们以后工夫统一:

# settings.py

TIME_ZONE = "Asia/Shanghai"
USE_TZ = False


import datetime
from django.utils import timezone
print(datetime.datetime.now())
print(timezone.now())

# 2023-02-26 22:33:00.442966
# 2023-02-26 22:33:00.442982

7、会话配置

session 相干的配置在第三十二篇笔记的时候有过具体介绍,这里只做一个索引介绍

SESSION_COOKIE_AGE

session 过期工夫,以秒为单位

SESSION_COOKIE_NAME

用于会话的 cookie 的名称,默认为 sessionid,可在 settings.py 中自定义批改

SESSION_ENGINE

管制 Django 存储会话数据的中央,默认值为 ‘django.contrib.sessions.backends.db’,也就是数据库,django_session 这张表。

咱们还在缓存那篇笔记中有过介绍如何将 session 存储到 Redis 缓存中,这里不反复介绍了。

8、其余配置

还有一些配置,比方 日志配置 LOGGING,中间件配置 MIDDLEWARE 等,都在日志笔记,中间件笔记中都有过介绍,这里就不再赘述了。

这里介绍一下如何拜访 settings 中的配置,能够通过文件门路的模式拜访,也能够通过 django.conf 拜访:

from hunter import settings
print(settings.DATABASES)

from django.conf import settings
print(settings.DATABASES)

这里,hunter 为咱们零碎的名称,所以在零碎根目录下,hunter/ 也是 settings.py 文件的下层文件夹。

本文首发于自己微信公众号:【Hunter 后端】

原文链接:Django 笔记三十九之 settings 配置介绍

如果想获取更多相干文章,可扫码关注浏览:

退出移动版