一、读写分离
django使用读写分离
1.settings.py配置
写:master(dafault)
读:slave
涉及到django服务如何选择使用数据库的问题
2.模型同步
注意
如果使用mysql数据库,首先应该先建库
使用sqlite3,不需要建库,直接数据迁移,同步表结构
python manage.py migrate --database slave
3.配置读写分离
使读写分别使用不同的数据库
使用自动模式
1.重写方法
重写的是数据库路由提供的方法,一共有4个,重写2个就可以了
- db_for_read()
- db_for_write()
在项目的主目录中,创建一个脚本文件mydbrouter.py,自定义数据库路由
2.配置指定的数据库路由
4.使用
按照配置,将数据写在了master库中,没有写在slave库中
数据库之间进行数据同步,需要在数据库中进行配置
一主多从
问题:如何选择slave
数据库集群,关于选择slave,需要加一个权重,达到负载均衡
这里随机选择slave库
1.settings.py配置
2.数据迁移
3.mydbrouter.py
二、日志
python3中为我们提供了logging包,主要用于记录程序运行期间,产生让你给的全部日志,统一分析。
在项目根目录创建了一个loggingtest.py文件
日志等级
日志配置
import logging
# 输出日志
# hander 句柄
logging_hander = logging.FileHandler('test.log',encoding='utf-8')
stream_hander = logging.StreamHandler()
log_format = '%(asctime)s【%(levelname)s】%(message)s' # 日志格式
time_format = '%Y-%m-%d %H:%M:%S' # 事件格式
# 日志配置
# 设置日志等级的设置
logging.basicConfig(level=logging.DEBUG,format=log_format,datefmt=time_format,handlers=[logging_hander,stream_hander])
# 调试,最详细的日志等级,通常用于问题项目的调试过程
logging.debug('这是debug等级')
# 详细程度仅次于debug,记录通常是关键节点的信息
logging.info('这是info等级')
# 警告,当某些不被期望的错误发生,但是不影响程序运行
logging.warning('这是warning等级')
# 出现严重的问题,导致部分功能不能运行
logging.error('这是error等级')
# 严重错误,导致程序中断
logging.critical('这是critical等级')
Django日志
django已经封装了log模块,提供了日志系统
工作中有两种选择
- 使用刚才写的日志系统,进行封装
- 使用django为我们封装好的
settings.py配置
# logging日志配置
LOGGING = {
'version': 1,
'disable_existing_loggers': False, # 是否禁用之前的日志
'handlers': {
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': os.path.join(BASE_DIR,'debug.log'),
},
},
'loggers': {
'django': {
'handlers': ['file'],
'level': 'DEBUG',
'propagate': True,
},
},
}
日志的使用
视图中导包
收集
在login视图中