我希望存储用户的活动,但我不确定在哪里存储它。我不认为数据库是一个选项,因为它将是非常大的。我想知道像facebook,dropbox这样的网站是如何记住特定用户的所有活动的。并且它不能存储在会话中,因为这不是特定于会话的,而是用户特定的。
请帮我解决你的建议。
答案 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这样的网站如何处理它,但除非你计划很快扩展标准数据库方法可能会持续一段时间。