本文首发于公众号:Hunter后端

原文链接: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 文件的上层文件夹。

如果想获取更多后端相关文章,可扫码关注阅读:

Django笔记三十九之settings配置介绍的更多相关文章

  1. Django笔记三十之log日志记录详解

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十之log日志的记录详解 这一节介绍在 Django 系统里使用 logging 记录日志 以下是一个简单的 logging 模块示例, ...

  2. Django笔记三十二之session登录验证操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十二之session登录验证操作 这一篇笔记将介绍 session 相关的内容,包括如何在系统中使用 session,以及利用 sess ...

  3. Django笔记二十九之中间件介绍

    本文首发于公众号:Hunter后端 原文链接:Django笔记二十九之中间件介绍 这一节介绍一下 Django 的中间件. 关于中间件,官方文档的解释为:中间件是一个嵌入 Django 系统的 req ...

  4. 【Unity 3D】学习笔记三十九:控制组件

    控制组件 角色控制组件和刚体组件都具备物理引擎的功能,须要绑定游戏对象才干实现对应的物理效果,而且同一个游戏对象中两者仅仅能存在一个,不能共存.刚体组件能够很精确的模拟现实世界中的一切物理效果,而角色 ...

  5. 论文阅读笔记三十九:Accurate Single Stage Detector Using Recurrent Rolling Convolution(RRC CVPR2017)

    论文源址:https://arxiv.org/abs/1704.05776 开源代码:https://github.com/xiaohaoChen/rrc_detection 摘要 大多数目标检测及定 ...

  6. tensorflow学习笔记(三十九):双向rnn

    tensorflow 双向 rnn 如何在tensorflow中实现双向rnn 单层双向rnn 单层双向rnn (cs224d) tensorflow中已经提供了双向rnn的接口,它就是tf.nn.b ...

  7. 第三百三十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—Scrapy启动文件的配置—xpath表达式

    第三百三十九节,Python分布式爬虫打造搜索引擎Scrapy精讲—Scrapy启动文件的配置—xpath表达式 我们自定义一个main.py来作为启动文件 main.py #!/usr/bin/en ...

  8. WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形

    原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...

  9. Django笔记十九之manager用法介绍

    本文首发于微信公众号:Hunter后端 原文链接:Django笔记十九之manager用法介绍 首先介绍一下 manager 的使用场景,比如我们有一些表级别的,需要重复使用的功能,都可以使用 man ...

  10. Django笔记三十一之全局异常处理

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十一之全局异常处理 这一篇笔记介绍 Django 的全局异常处理. 当我们在处理一个 request 请求时,会尽可能的对接口数据的格式 ...

随机推荐

  1. 智汇成城 ,创赢未来 | AI+产业峰会智慧城市专场在深成功举办!

    11月4日下午,由福田区人才工作局指导,广州英码信息科技有限公司和共达地创新技术(深圳)有限公司联合主办,深圳市人工智能行业协会承办的AI+产业峰会之智慧城市专场活动在深圳市南山区成功举办. &quo ...

  2. 上位机-串口通信详解(以RS232为例))

    1.什么是串口通信? 写这个的时候我在想应该怎么解释串口通信,因为串口通信很多朋友不了解的原因是涉及到硬件的知识,对于没有相关专业知识的朋友很难理解串口通信.所以我这里只做部分的解释,需要了解更多硬件 ...

  3. vitrualbox虚拟机搭建

    参考:https://blog.csdn.net/weixin_45115705/article/details/100661644?depth_1-utm_source=distribute.pc_ ...

  4. 【故障公告】cc攻击又来了,雪上加霜的三月

    非常非常抱歉!今天 21:20-22:10 左右,肆无忌惮的 cc 攻击又来了,蓄意攻击者很厉害,躲过阿里云云盾的黑洞机制,轻松击垮园子的博客站点,又给大家带来了很大的麻烦,请大家谅解! 今年3月是园 ...

  5. nginx配置反向代理服务器,实现在https网站中请求http资源

    网站使用nginx作为服务器,协议从http升级为https的注意事项. 具体升级步骤请点击搜索 1.首先,修改宝塔面板配置 选择配置文件,http请求重定向为https.所有80端口请求都重定向为h ...

  6. RealWorldCTF渗透赛第二期复现-ctfshow

    比赛概述 开始时间:2023年3月10日15时 环境保留时间:72小时 环境重置时间:20分钟 官方wp链接:Docs (feishu.cn) [本次复现跟着官方WP进行,只做记录学习之用] 0x1 ...

  7. springboot--yaml数据读取的三种方式

    结果:

  8. Excel批量加粗关键词(宏)

    代码如下: Sub 批量加粗() Dim a As Range Dim b As String b = InputBox("请输入要加粗的关键字") For Each a In A ...

  9. 杂谈--User Story

    本篇用于给自己后续慢慢看,对敏捷感兴趣的小伙伴,可以自行去看官方文档或者各种网站的视频讲解,更详细. 对于敏捷开发来说,User Story是开发的基础,把原本需求拆成最小粒度的Story,以方便拆分 ...

  10. SQL Server修改sa用户密码

     SQL Server数据库使用windows用户登录,安全性->登录名->找到sa用户->属性: 可直接修改sa用户密码(可去掉勾选强制实施密码策略)