项目流程
Log日志介绍
Loggers:把日志传给handlers Handlers:控制日志存放到哪里 Filters:那些日志可以从loggers传送到handlers Formatters:日志的格式
日志记录级别 logging模块的重点在于生成和处理日志消息。每条消息由一些文本和指示其严重性的相关级别组成。级别包含符号名称和数字值 CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTEST CRTICAL: 关键错误/消息 ERROR: 错误 WARNING: 警告信息 INFO: 通知信息 DEBUGZ: 调试信息 NOTEST: 无级别
在配置项中配置
LOGGING
= {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(module)s %(lineno)d %(message)s'
},
},
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'file': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os
.path
.join
(os
.path
.dirname
(BASE_DIR
), "logs/django_mall_log.log"),
'maxBytes': 300 * 1024 * 1024,
'backupCount': 10,
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['console', 'file'],
'propagate': True,
},
}
}
REST_FRAMEWORK
= {
'EXCEPTION_HANDLER': 'django_mall.tools.exceptions.exception_handler',
}
自定义异常处理方法
logger
= logging
.getLogger
('django')
def exception_handler(exc
, context
):
"""
自定义异常处理
:param exc: 异常
:param context: 抛出异常的上下文
:return: Response响应对象
"""
response
= drf_exception_handler
(exc
, context
)
if response
is None:
view
= context
['view']
if isinstance(exc
, DatabaseError
) or isinstance(exc
, RedisError
):
logger
.error
('[%s] %s' % (view
, exc
))
response
= Response
({'message': '服务器内部错误'}, status
=status
.HTTP_507_INSUFFICIENT_STORAGE
)
return response
redis配置
redis 简介
Redis是一个开源的使用ANSI C语言编写、基于内存亦可持久化的日志型、Key-Value数据库,并提供了对多种编程语言的支持。redis是一个key-value存储系统。支持存储的value类型包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希)。这些数据类型都支持push/pop、add/remove及取交集并集和差集等操作,且Redis支持各种不同方式的排序。为了保证效率,数据都是缓存在内存中。redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。
Redis的特点
Redis支持数据的持久化。 Redis是完全在内存中保存数据的数据库,使用磁盘只是为了持久化。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储 Redis支持数据的备份,即master-slave模式的数据备份。
Redis 优势
性能极高 – Redis 是一个高性能的key-value数据库,读的速度能达到110000次/s,写的速度能达到81000次/s 。 相比于许多键值数据存储系统,Redis有丰富的数据类型 – Redis支持string,hash,list,set及zset(sorted set)等数据类型。 原子性 – Redis的所有操作都是原子性的,要么成功执行要么失败完全不执行。单个操作是原子性的。多个操作也支持事务,即原子性 丰富的特性 – Redis支持 publish/subscribe, 通知, key 过期等特性
配置redis数据库
CACHES
= {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.1.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.1.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"redis_verifications": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.1.1:6379/2",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
"history": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/3",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
}
注意不要LOCATION最后部分6379/?部分不要超过12 在redis session中 del key 删除键 keys * 所有键 get xxx 获取某个键的值 del xxx 删除xxx set xxx “valid” 创建“valid”,键为xxx select 2 表示切换到2库,注:Django的cache是存在1库的(上面设置的),进入redis的时候默认是0库的 TTL xxx 查看剩余过期时间 EXPIRE xxx 300 设置xxx的过期时间为300秒