2013-02-21 74 views
8

我期待存储用户的活动,但我不确定在哪里存储它。我不认为数据库是一个选项,因为它会比。我期待知道Facebook,Dropbox等网站如何记住特定用户的所有活动。它不能存储在会话中,因为这不是会话特定的,而是用户特定的。在Django中存储用户活动

请帮我一下你的建议。

回答

6

通常情况下,您可以使用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表单以及您使用这些表单执行的任何操作。

6

你可能想看django-activity-stream这是activity streams spec的实现。这存储数据库中的动作列表,并允许以下用户/实体给予与Facebook类似的东西,如果这是您感兴趣的内容。

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