为什么在 Django 中使用预先编写的审计包

Why use a pre-written audit package in Django

我正在考虑如何使用 Django 对我的数据库进行审计。有很多审计包,我决定使用一些东西来记录数据库中模型的更改,而不是外部,但是有人能给我理由为什么我不应该自己尝试实现这个吗?我只有有限的时间来实施这个(大约一周),但我应该注意任何问题或复杂因素吗?

我假设对于每个模型我都需要一个预保存信号和post-保存信号并且我需要将模型、字段、先前值和post-保存值存储到分贝

一般来说,使用(流行的)库通常比编写自己的实现更好。流行的库通常附带 "batteries included"。让您轻松设置,方便配置。

但更重要的是,在(相对)大型社区中使用的图书馆通常更安全。最常见的错误已经被修复,而且通常花费(相当长的)时间不是开始项目,而是 "scaffold" 更好的建模、实现等

您自己的实施中的错误可能会花费大量时间或金钱。例如,如果您的审计工具不完全安全,黑客可以使用审计 "stream" 检查您的数据库。

使用库时,通常会记录不完全符合预期的行为,此外,如果您使用流行的库,其他人(例如 Whosebug 上的此处)可以帮助解决特定问题。如果您自己实施,那么您是唯一了解这些机制的人。如果您在软件库中发现错误,您可以在该库的 GitHub 页面上创建问题,或者更好的是,提出拉取请求。这样,您发现的问题就可以为使用同一库的所有用户解决。

当然,通过编写自己的实现,您最终可能会达到相同的水平。但这将需要解决很多 "teething problems"。通常一个项目的实际成本不是 "initial development",而是软件的 "maintenance":修复错误、解决性能问题和安全漏洞、扩展库。

例如,在您的特定情况下,使用信号可能不是最佳选择。 Django的ORM有很多方法可以规避信号。例如 .bulk_create(..) [Django-doc] 不会触发信号。因此使用信号可能不是最好的主意。