由于本项目配置了缓存机制,需要在 settings.py 文件中设置。配置redis作为cache和session的存储。
pip install django-redis
① 缓存和 session 配置
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/5",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
}
}
# 设置允许保存session
SESSION_SAVE_EVERY_REQUEST = True
# 设置session存放在缓存中
SESSION_ENGINE = ‘django.contrib.sessions.backends.cache‘
# 使用默认选项的缓存设置存放session
SESSION_CACHE_ALIAS = "default"
# 设置session过期时间,关闭浏览器时session过期(cookies) 和设置固定时间后过期 只能二选一
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
# 30分钟后session过期, 只能和关闭时浏览器失效 二选一
# SESSION_COOKIE_AGE=5*60
会发现,一些常见的配置都会在 settings.py 文件中设置,比如时间、语言、缓存、邮件、登录重定向、重载自定义用户模型。
② 登录重定向
使用django系统的登录状态装饰器时,没有登录的话,跳往登录页面后路径是/acount/login 需要重新指定:
# 登录的url, login_required 装饰器使用
LOGIN_URL = '/users/login'
③ 邮箱
本项目使用的是 163 的邮箱,在个人的 163 邮箱中需要打开
# Email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.163.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_FROM = ''
④ 重载自定义用户模型
django 自带的用户模型,不能满足开发需求,可以自定义重载这两个用户模型类
from django.contrib.auth.models import AbstractUser
from django.contrib.auth.models import AbstractBaseUser
需要将自定义的用户重载到 settings.py 文件中
# django认证系统使用的用户模型
AUTH_USER_MODEL = "users.User"
⑤ 读写分离路由器
通过配置数据库路由,来自动实现,这样就不需要每次读写都手动指定数据库了。数据库路由中提供了四个方法。这里这里主要用其中的两个:def db_for_read()决定读操作的数据库,def db_for_write()决定写操作的数据库。
class MasterSlaveDBRouter(object):
"""读写分离路由"""
def db_for_read(self, model, **hints):
"""读"""
return "slave"
def db_for_write(self, model, **hints):
"""写"""
return "default"
def allow_relation(self, obj1, obj2, **hints):
"""允许关联查询"""
return True
在settings.py中指定 DATABASE_ROUTERS
DATABASE_ROUTERS = ["utils.db_router.MasterSlaveDBRouter"]