【问题标题】:Storing user activity in Django在 Django 中存储用户活动
【发布时间】:2013-02-06 17:29:32
【问题描述】:

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

请帮助我提出您的建议。

【问题讨论】:

    标签: django django-models


    【解决方案1】:

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

    【讨论】:

    • 我可以将log_actions 更改为我的模型“实例”吗?所以我可以跟踪我的自定义模型活动?
    • @Progam 当然。你可以调用一个方法在你想要的任何地方插入这个模式。默认 action_flag 有 3 个值; 1: insert, 2: update, 3: delete。使用您的自定义操作扩展它并将您希望的所有内容保存到此表中
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2021-11-19
      • 2011-11-22
      • 1970-01-01
      • 2018-09-23
      • 2011-10-14
      • 2019-04-09
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多