保留GAE中所有Python数据库对象的审计跟踪
||
我是Python的新手。我正在尝试弄清楚如何模拟使用PHP和MS-SQL编写的现有应用程序,并在Google Apps Engine上重新创建基本的后端功能。
我要执行的操作之一是在MS-SQL中模拟某些表上的当前活动,这是一个Insert / Delete / Update触发器,该触发器将当前(更改前)记录的副本插入到审核表,并用日期和时间标记。然后,我可以在以后查询此审计表,以检查记录经过的更改的历史记录。
我在stackoverflow上找到了以下代码:
class HistoryEventFieldLevel(db.Model):
# parent, you don\'t have to define this
date = db.DateProperty()
model = db.StringProperty()
property = db.StringProperty() # Name of changed property
action = db.StringProperty( choices=([\'insert\', \'update\', \'delete\']) )
old = db.StringProperty() # Old value for field, empty on insert
new = db.StringProperty() # New value for field, empty on delete
但是,我不确定如何将此代码应用于新数据库中的所有对象。
我应该为每个对象创建get()和put()函数,然后在put()函数中创建此类的子对象并设置其特定属性吗?
没有找到相关结果
已邀请:
2 个回复
茂坦湿床够
方法是不够的,因为还可以通过调用
来存储实体,
不会在正在编写的类上调用任何方法。 如我的博客文章所述,您可以通过修补SDK来调用前/后调用挂钩来解决此问题。 或者,您可以通过实现RPC挂钩在较低级别上进行此操作,如本文另一篇博客文章所述。 将审核记录存储为修改后的实体的子实体是一个好主意,这意味着您可以以事务方式进行操作,尽管这将需要进一步,更困难的更改。 您不需要每个字段都有记录。实体具有自然的序列化格式,即协议缓冲区,您可以简单地将实体作为编码的协议缓冲区存储在审核记录中。如果您在模型级别进行操作,请使用model_to_protobuf将模型转换为协议缓冲区。 以上所有内容在修改记录之后而不是在更改之前更容易应用于存储记录。但是,这不应该成为问题-如果在修改记录之前需要该记录,则只需返回审核日志中的一项即可。
古擅坛犯
输出:
阅读审计跟踪代码(仅200行),以了解他们如何针对django执行此操作