文章目录
- 5 数据库配置
-
- 5.1 常用配置项
- 5.2 数据库配置示例
- 5.3 其它数据库配置选项
- 6 缓存
-
- 6.1 常用配置项
- 6.2 内置的缓存后端
- 6.3 缓存配置示例
- 6.4 缓存中间件的配置
创建django项目后,会自动生成初始的项目文件如下:
manage.py # 管理django项目的命令行工具
django_pro/ # 项目的python包
__init__.py # 表示当前文件夹是一个python包
settings.py # 项目的配置文件
urls.py # 项目的URL声明
asgi.py # 项目运行在兼容ASGI的web服务器上的入口
wsgi.py # 项目运行在兼容WSGI的web服务器上的入口
settings.py
文件包含了项目的基础配置。以下是数据库配置和缓存配置的内容。
settings.py
可选的全部配置见:django配置
5 数据库配置
DATABASES
用于配置项目使用的数据库连接信息。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
DATABASES
是字典,字典的键是数据库的别名,值是包含数据库连接参数的字典。'default'
键是必须有的。
一个django项目可以配置多个数据库,适用于读写分离、分库的场景。
5.1 常用配置项
ENGINE
指定数据库后端NAME
数据库的名称,对与SQLite是文件路径USER
连接数据库的用户名PASSWORD
连接数据库的密码HOST
数据库服务器的主机地址,默认使用本地连接PORT
数据库服务器的端口号,默认使用数据库的默认端口OPTIONS
额外的数据库连接选项,字典格式ATOMIC_REQUESTS
是否把每个HTTP请求包装子啊一个数据库事务中。
为True时,每个请求都会开启一个事务,请求成功则提交,失败则回滚。CONN_MAX_AGE
数据库连接的最大存活时间
为0表示每次请求后关闭连接,为None表示一致保持连接。TEST
配置测试数据库的参数
5.2 数据库配置示例
SQLite
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
PostgreSQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
}
}
MySQL
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydatabase',
'USER': 'myuser',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
},
}
}
5.3 其它数据库配置选项
DATABASE_ROUTERS
使用数据库路由器。
数据库路由器需要自己定义。用于指定应用使用哪一个数据库配置。DEFAULT_TABLESPACE
对未指定表空间的模型,使用默认表空间。DEFAULT_INDEX_TABLESPACE
对未指定索引的字段上使用默认表空间。PostgreSQL和Oracle支持表空间,可用于优化数据库表现。
DEFAULT_AUTO_FIELD
默认的主键字段类型
默认值为'django.db.models.AutoField'
,用于无主键模型。
6 缓存
CACHES
用于配置项目使用的缓存。它是一个嵌套的字典,把缓存别名映射到单个缓存选项。
CACHES
配置也必须有一个default
选项,它的默认值为:
{
"default": {
"BACKEND": "django.core.cache.backends.locmem.LocMemCache",
}
}
6.1 常用配置项
BACKEND
使用哪个后端进行缓存
可以使用内置的缓存后端,也可以写为缓存后端类的点分隔路径。LOCATION
缓存位置。
可以是文件系统缓存的目录,缓存服务器的主机和端口,或本地内存缓存的识别名称。KEY_FUNCTION
由点分隔路径指定的函数,该函数定义如何将前缀、版本和密钥组成缓存密钥。KEY_PREFIX
自动包含在所有缓存键中的字符串。OPTIONS
传递给缓存后端的额外参数。TIMEOUT
缓存的过期时间,默认为300,单位秒。VERSION
缓存密钥的默认版本号。
6.2 内置的缓存后端
django.core.cache.backends.locmem.LocMemCache
本地内存缓存。
简单快速,一般用在开发环境。多进程时无效,适合单机调试。django.core.cache.backends.filebased.FileBasedCache
文件缓存。
性能低,适合小项目或无法使用内存缓存或数据库缓存的场景。django.core.cache.backends.db.DatabaseCache
数据库缓存。
性能一般,适合没有Redis或Memcached缓存但是又需要持久化的场景。
需要先创建缓存表。django.core.cache.backends.dummy.DummyCache
虚拟缓存。
仅实现缓存接口,但不实际存储数据。适合测试或禁用缓存。django.core.cache.backends.memcached.PyMemcacheCache
Memcached缓存,使用python-memcached
库。
Memcached缓存是高性能分布式缓存,支持服务器集群,适合生产环境。django.core.cache.backends.memcached.PyLibMCCache
Memcached缓存,使用pylibmc
库。django.core.cache.backends.redis.RedisCache
Redis缓存,需安装redis
库。
高性能,支持持久化。安装三方库
django-redis
后,可以使用django_redis.cache.RedisCache
做为Redis缓存后端。
6.3 缓存配置示例
内存缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
'LOCATION': 'unique-snowflake',
'TIMEOUT': 3600,
'OPTIONS': {
'MAX_ENTRIES': 1000,
}
}
}
文件缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
'TIMEOUT': 3600,
}
}
数据库缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
'LOCATION': 'my_cache_table', # 数据库表名
}
}
Redis缓存,使用三方库django-redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://192.168.32.130:6379",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100},
"DECODE_RESPONSES":True,
"PASSWORD": "root",
}
}
}
Redis缓存,django本身和redis
库的绑定
CACHES = {
"default": {
"BACKEND": "django.core.cache.backends.redis.RedisCache",
"LOCATION": "redis://username:password@127.0.0.1:6379",
}
}
Memcached缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211', # Memcached 服务器地址
}
}
虚拟缓存
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}
6.4 缓存中间件的配置
MIDDLEWARE
设置时,可以设置django内置的两个中间件用于缓存站点页面:
django.middleware.cache.UpdateCacheMiddleware
在请求阶段从缓存中获取页面。django.middleware.cache.FetchFromCacheMiddleware
在响应阶段缓存页面。
注意 由于中间件执行顺序的原因,
UpdateCacheMiddleware
必须放在MIDDLEWARE
列表的第一位,FetchFromCacheMiddleware
必须放在列表最后一位。
设置缓存中间件后,可以在settings.py
文件操作以下配置:
CACHE_MIDDLEWARE_ALIAS
用于缓存中间件的缓存链接,默认'default'
CACHE_MIDDLEWARE_KEY_PREFIX
缓存中间件生成的缓存密钥的前缀字符串CACHE_MIDDLEWARE_SECONDS
缓存中间件缓存每个页面的秒数,默认600。