Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在Django中使用预先编写的审计包_Django_Auditing_Django Auditlog - Fatal编程技术网

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

为什么在Django中使用预先编写的审计包,django,auditing,django-auditlog,Django,Auditing,Django Auditlog,我正在考虑如何用Django实现对数据库的审计。有很多审计包,我决定使用一些东西来记录数据库中模型的更改,而不是外部更改,但是有谁能告诉我为什么我不应该尝试自己实现它?我有一个有限的时间来实现这一点(大约一周),但我是否应该意识到任何问题或复杂的因素 我假设对于每个模型,我需要一个预保存信号和后保存信号,并且我需要将模型、字段、前一个值和后保存值存储到db中。一般来说,使用(流行的)库通常比编写自己的实现更好。受欢迎的图书馆通常附带“电池”。它允许您轻松地进行设置,并方便地进行配置 但更重要的是

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


我假设对于每个模型,我需要一个预保存信号和后保存信号,并且我需要将模型、字段、前一个值和后保存值存储到db中。一般来说,使用(流行的)库通常比编写自己的实现更好。受欢迎的图书馆通常附带“电池”。它允许您轻松地进行设置,并方便地进行配置

但更重要的是,一个被用作(相对)大型社区的图书馆通常更安全。最常见的错误已经被修复,通常需要(相当长的)时间来不启动项目,而是将其“搭建”到更好的建模、实现等

您自己的实现中的bug可能会花费很多时间或金钱。例如,如果您的审计工具不完全安全,黑客可以使用审计“流”检查您的数据库

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

当然,通过编写自己的实现,最终可能达到相同的级别。但这需要解决很多“初期问题”。通常项目的真正成本不是“初始开发”,而是软件的“维护”:修复bug、解决性能问题和安全漏洞、扩展库


例如,在您的特定情况下,使用信号可能不是最佳选择。Django的ORM有很多规避信号的方法。例如,a将不会触发信号。因此,使用信号可能不是最好的主意。

出于同样的原因,您不应该自己实现Web服务器或操作系统等。因为这样可以节省时间,而且如果一个库被(相对)大型社区使用,通常最常见的错误/bug已经解决。是的,您可以解决“初期问题”但这将需要相当长的时间,错误/问题通常会花费大量资金。思考一下为什么要实施自己的审计包。我在这里看到的唯一原因/优点(除了许多缺点)是可定制性。第三方解决方案通常非常通用,但有时它们并不适合您的项目。如果我是你,我会选择最好的第三方选项,将其克隆到我的代码库中(显然,如果没有许可问题),并进行必要的更改以使其适合我的项目。你可以做到两全其美(可定制+节省时间),但要让克隆的代码库保持最新,并在原始代码库中修复错误。这非常感谢,你明确的理由将帮助我向我的产品负责人阐明这个案例