Django公用组件封装

这篇文章主要还是想提高开发效率,将以前项目中经常会用到的方法提取出来,方便其他项目复用,所以这篇文章将是一篇持续更新的文章,但是不要指望更新的频率会更高,不是所有可以独立的组件都值得记录。

我这里没有顺序之分,想到哪里就写哪里。

日志

日志记录应该是我们开发中使用频率较高的必备功能之一吧,它的重要性不言而喻,这里只是做了一个很简单的封装,主要是方便以后你想对日志有进一步的处理,那把它独立出来是最好不过的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import traceback

from django.conf import settings


def log_error(log, title, e, other=None, request=None):
"""
提取 Log Error 错误栈
:param log: log instance eg: log_validate = logging.getLogger("validate")
:param title: log 标题
:param e: log 错误栈 Exception
:param other: log 辅助性描述
:param request: django request
:return:
"""
# 错误开始/结束提示
start_title = f"===================== {settings.WSGI_APPLICATION.split('.')[0]} START {title},错误={e}, {other} START ====================="
end_title = "===================== E N D {0} E N D =====================".format(title)

if settings.DEBUG:
print("===================== START {0},错误={1}, {2} START =====================".format(title, e, other))
# 如果开启debug,控制台打印错误堆栈信息
traceback.print_exc()

# 日志错误开始
log.error(start_title)
# 如果传入request则日志输出request信息
if request is not None:
log.error(f"当前请求异常路径uri={request.build_absolute_uri()}")
# 日志错误堆栈信息
log.exception(e)
# 日志错误结束
log.error(end_title)

可能大家看到会说你这跟原生区别不大,只是加了一个开始结束记录了一个原始错误堆栈嘛,没错,就是这样。我上面说了独立出来只是为了对日志可以进行进一步操作,比如你的错误日志要发送到指定邮箱,亦或是想要存到数据库、缓存;想要进一步提取请求者IP,原始URL之类的信息,你在这里都可以做到,我这样讲你会不会觉得把它独立出来就有意义的多了?