在Django中存储用户活动

时间:2013-02-21 11:46:09

标签: django django-models

我希望存储用户的活动,但我不确定在哪里存储它。我不认为数据库是一个选项,因为它将是非常大的。我想知道像facebook,dropbox这样的网站是如何记住特定用户的所有活动的。并且它不能存储在会话中,因为这不是特定于会话的,而是用户特定的。

请帮我解决你的建议。

2 个答案:

答案 0 :(得分:7)

如果您愿意,通常可以使用Django Admin Logs进行此类活动。

通常,Django会跟踪管理操作,例如创建,更新或删除现有记录。它具有以下结构:

from django.contrib.admin.models import LogEntry

LogEntry.objects.log_action(
                            user_id = ...,
                            content_type_id = ...,
                            object_id = ...,
                            object_repr = ....,
                            change_message = ...,
                            action_flag = ...
                           )

我在我的系统中使用它作为记录器,并跟踪每个动作。通常,Django会记录插入,更新或删除通过管理表单执行的操作,并记录我的手写视图和表单操作。此外,您可以使用signals来捕获用户操作,例如登录/注销。

我定义了新的动作标志。 Django使用3个标志:1表示插入,2表示更新,3表示删除。我用动作标记扩展了该列表。

使用它的优点是,正如我所说,您不需要处理默认的Django Admin表单以及使用这些表单执行的任何操作。

答案 1 :(得分:7)

您可能希望查看django-activity-stream这是activity streams spec的实现。这会在数据库中存储一系列操作,并允许以下用户/实体提供类似于Facebook的内容(如果这是您感兴趣的内容)。

然而,正如您所提到的,这可能最终会产生大量数据,这对于传统的单一数据库方法可能有点多。我不确定像Twitter这样的网站如何处理它,但除非你计划很快扩展标准数据库方法可能会持续一段时间。