本文首发于公众号:Hunter后端
原文链接:Django笔记三十九之settings配置介绍
(资料图片)
这一篇笔记介绍 Django 里 settings.py 里一些常用的配置项,这些配置有一些是在之前的笔记中有过介绍的,比如 logging 的日志配置,session 的会话配置等,这里就只做一下简单的回顾,有一些是之前没有介绍过的就着重介绍一下。
以下是本篇笔记目录:
邮箱配置允许访问地址配置数据库配置调试模式配置注册应用程序配置时区时间配置会话配置其他配置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则是密码
PORTMySQL 一般是 3306,如果是映射的其他端口改成其他端口即可
CONN_MAX_AGE还有一个参数为 CONN_MAX_AGE,表示一个数据库连接的寿命,以秒为整数,默认为 0,表示每次数据库请求结束之后即关闭数据库连接。
如果设置为 60,那么数据库连接在开启之后 60s 即关闭此连接,在此期间,其他请求可以复用此连接。
如果设置为 None,则表示一直处于连接状态。
OPTIONS是用于添加连接数据库时额外的参数,比如我们的 MySQL 的连接配置不直接在 DATABASES 中定义,而是通过配置文件的方式使用,如下官方文档的一个使用示例:
# settings.pyDATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "OPTIONS": { "read_default_file": "/path/to/my.cnf", }, }}# my.cnf[client]database = NAMEuser = USERpassword = PASSWORDdefault-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" 串行化
TESTTEST 参数默认也是一个空 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 datetimeprint(datetime.datetime.now())from django.utils import timezoneprint(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.pyTIME_ZONE = "Asia/Shanghai"USE_TZ = Falseimport datetimefrom django.utils import timezoneprint(datetime.datetime.now())print(timezone.now())# 2023-02-26 22:33:00.442966# 2023-02-26 22:33:00.442982
7、会话配置session 相关的配置在第三十二篇笔记的时候有过详细介绍,这里只做一个索引介绍
SESSION_COOKIE_AGEsession 过期时间,以秒为单位
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 settingsprint(settings.DATABASES)from django.conf import settingsprint(settings.DATABASES)
这里,hunter 为我们系统的名称,所以在系统根目录下,hunter/ 也是 settings.py 文件的上层文件夹。如果想获取更多后端相关文章,可扫码关注阅读: