在Django中存储用户活动

Sar*_*tra 13 django django-models

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

请帮我解决你的建议.

Fal*_*gel 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 = ...
                           )
Run Code Online (Sandbox Code Playgroud)

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

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

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


Roa*_*ter 7

您可能希望查看django-activity-stream,它是活动流规范的一个实现.这将在数​​据库中存储操作列表,并允许以下用户/实体提供与Facebook类似的内容(如果您感兴趣的话).

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