提供自动creator/editor/datetime_created/datetime_modified字段的抽象基类。
django-audited-models的Python项目详细描述
Author: | Chris Chambers |
---|---|
Date: | 2012/05/08 |
django审计模型提供了一个简单的抽象基类(和工厂 函数)用于跟踪数据库记录的创建和修改时间,如 以及记录的创建者和最后一个编辑它的用户。它利用 两个可插拔应用程序可实现此功能:
- Django Extensions,它提供了(除许多其他外)一个 CreationDateTimeField和ModificationDateTimeField。
- Django Threaded Multihost,最初是为Satchmo开发的,它 提供一个threadlocals机制,该机制对django可靠地工作 通过sites框架为多个站点供电的安装。
安装
- 安装pip。
- 运行pip install django-audited-models。
- 将threaded_multihost.middleware.ThreadLocalMiddleware添加到 MIDDLEWARE_CLASSES。
- 从django中的AuditedModel而不是models.Model继承 应用。
- 利润!
说明
Django审核的模型满足以下几个需求:
- 这种元数据几乎总是有用的,而且捕获起来很便宜- 你的大多数客户都认为这些信息已经被记录下来了 如果他们做不到就要沮丧(“你的意思是我们看不到谁 创建了此记录?“)
- django的管理日志功能提供了一些细节,但是 缺陷在于它只捕获发生在管理员内部的事件 本身。
- 此应用程序为 元数据。
- 此应用程序使用其他几个应用程序捕获此 自动获取信息。不必用无关的东西来污染你的观点 逻辑或重写ModelAdmin方法以存储创建 记录。
- 它是可插入的-只需将其放入,安装其需求,从 AuditedModel,您将拥有您的创建/修改日期和 分别由用户负责。同样,替换 ModelAdmin使用AuditedAdmin子类,您将拥有一些 管理用户界面的合理默认值(只读元数据字段等)。
- 作为奖励,确保MyModel.objects.latest()执行某些操作 默认情况下是合理的-在使用解释器时非常方便, 尤其是。
有些人可能会质疑时间输入字段的详细程度 (datetime_created和datetime_modified)。请考虑以下事项:
>>> from datetime import date >>> latest_user = User.objects.latest('date_joined') >>> if latest_user.date_joined < date.today(): >>> print "Nobody has joined the site today." # Intuitively, this looks like it will work, but... TypeError: can't compare datetime.datetime to datetime.date
python对待datetime对象与对待dates对象非常不同,并且 显式字段名提醒开发人员注意这种差异,并有助于防止 错误的假设导致的错误。
要求
- Python2.5+
- Django 1.2+
- requirements.txt 中列出的应用程序
您还需要安装 requirements-dev.txt以便运行测试套件。