1. 缓存网页
1.1 配置缓存
# settings.py
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': ['redis://47.101.166.226:6379/0', ],
'KEY_PREFIX': 'carsearch',
'OPTIONS': {
'CLIENT_CLASS': 'django_redis.client.DefaultClient',
'CONNECTION_POOL_KWARGS': {
'max_connections': 1024,
},
'PASSWORD': 'mongnalisa',
}
}
}
1.2 方法一使用缓存
pip install drf-extensions
# settings.py
REST_FRAMEWORK_EXTENSIONS = {
# 默认的缓存超时时间
'DEFAULT_CACHE_RESPONSE_TIMEOUT': 300,
# 默认使用哪一组缓存
'DEFAULT_USE_CACHE': 'default',
# 配置默认缓存单个对象的key函数
'DEFAULT_OBJECT_CACHE_KEY_FUNC': 'rest_framework_extensions.utils.default_object_cache_key_func',
# 配置默认缓存对象列表的key函数
'DEFAULT_LIST_CACHE_KEY_FUNC': 'rest_framework_extensions.utils.default_list_cache_key_func',
}
让视图集类继承于CacheResponseMixin这个类
# views.py
class SearchViewSet(CacheResponseMixin, ModelViewSet):
queryset = Record.objects.all().order_by('-makedate')
# 数据序列化
serializer_class = RecordSerializer
1.3 方法二: 使用方法装饰器装饰类
# views.py
@method_decorator(decorator=cache_page(timeout=120, cache='default', key_prefix='records'), name='list')
@method_decorator(decorator=cache_page(timeout=60, cache='default', key_prefix='record'), name='retrieve')
class SearchViewSet(ModelViewSet):
queryset = Record.objects.all().order_by('-makedate')
# 数据序列化
serializer_class = RecordSerializer
2. 配置日志
2.1 常规设置
# settings.py
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
# 配置日志格式化器
'formatters': {
'simple': {
'format': '%(asctime)s %(module)s.%(funcName)s: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
'verbose': {
'format': '%(asctime)s %(levelname)s [%(process)d-%(threadName)s] '
'%(module)s.%(funcName)s line %(lineno)d: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
}
},
# 配置日志过滤器
'filters': {
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
# 配置日志处理器
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
'filters': ['require_debug_true'],
'formatter': 'simple',
},
'file1': {
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': 'access.log',
# 星期天
'when': 'W0',
# 最多保存12个
'backupCount': 12,
'formatter': 'simple',
'level': 'INFO',
},
'file2': {
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': 'error.log',
# 每天
'when': 'D',
# 最多保存31天
'backupCount': 31,
'formatter': 'verbose',
'level': 'WARNING',
},
},
# 配置日志器
'loggers': {
'django': {
'handlers': ['console', 'file1', 'file2'],
'propagate': True,
'level': 'DEBUG',
},
}
}
2.2 添加调试工具中间件
# settings.py
'debug_toolbar.middleware.DebugToolbarMiddleware',
2.3 配置调试工具
# settings.py
DEBUG_TOOLBAR_CONFIG = {
# 引入jQuery库
'JQUERY_URL': 'https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js',
# 工具栏是否折叠
'SHOW_COLLAPSED': True,
# 是否显示工具栏
'SHOW_TOOLBAR_CALLBACK': lambda x: True,
}
2.4 配置urls.py
# urls.py
if settings.DEBUG:
import debug_toolbar
urlpatterns.insert(0, path('__debug__/', include(debug_toolbar.urls)))
3. 项目上线后不需要console, 级别应修改为WARRING或者ERROR
日志级别 (level): DEBUG < INFO < WARNING < ERROR < FATAL