【django】2-2 (django配置) 数据库配置、缓存配置

发布于:2025-03-28 ⋅ 阅读:(28) ⋅ 点赞:(0)

文章目录

  • 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内置的两个中间件用于缓存站点页面:

  1. django.middleware.cache.UpdateCacheMiddleware 在请求阶段从缓存中获取页面。
  2. django.middleware.cache.FetchFromCacheMiddleware 在响应阶段缓存页面。

注意 由于中间件执行顺序的原因,UpdateCacheMiddleware必须放在MIDDLEWARE列表的第一位,FetchFromCacheMiddleware必须放在列表最后一位。

设置缓存中间件后,可以在settings.py文件操作以下配置:

  • CACHE_MIDDLEWARE_ALIAS 用于缓存中间件的缓存链接,默认'default'
  • CACHE_MIDDLEWARE_KEY_PREFIX 缓存中间件生成的缓存密钥的前缀字符串
  • CACHE_MIDDLEWARE_SECONDS 缓存中间件缓存每个页面的秒数,默认600。