python - 如何对数据库中的登录进行建模?

标签 python database logging model

我有一个系统,允许用户将视频上传到 Youtube,同时我在数据库中保存日志,现在的问题是我不知道如何对其进行建模。

事实证明,使用数据库的日志系统(我使用 Django 的 ORM)过于冗长,因为我需要生成格式良好的页面以允许“管理员”用户查看用户的事件。

现在我有两个选择:

第一:

使用外键和字段来指示类型。 优点:

  • 简单的实现

缺点:

  • 当我必须查询日志时,额外的工作

第二:

使用继承将日志分为三部分:创建、更新和删除。 创建必须存在才能有视频条目存在,如果视频条目有删除日志,则视频条目将被删除。

优点:

  • 编程方面的简单逻辑

缺点:

  • 模型实现复杂, future 扩展可能不灵活。

不知道哪个更好?或者我把所有这个问题都搞错了?(就像这类问题已经有一个模式了?)

最佳答案

例如,在第一个变体中,您可以为您的 Log 模型创建 3 个附加的 QueryManager 并使用它们(它将与第 2 个变体类似,但无需创建 3 个附加模型)。

它们可以类似于create_objectsupdate_objectsdelete_objects或更短(例如create_log)。

这是管理器类的示例:

from django.db.models import Manager

class LogManager(Manager):
    def __init__(self, type):
        super(LogManager, self).__init__()
        # add check of type if you need
        self._type = type

    def get_queryset(self):
        return super(LogManager, self).get_queryset().filter(type=self._type)

此代码仅用于演示(我没有测试)。

在你的模型类中,你应该指定 3 个额外的管理器,如下所示:

from django.db.models import Model

class Log(Model):
    create_log = LogManager('create')
    update_log = LogManager('update')
    delete_log = LogManager('delete')

或者您可以使用 __getattr__ 方法来获取适当的管理器,但“显式优于隐式”。

关于python - 如何对数据库中的登录进行建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17183862/

相关文章:

python - Pandas :如何用该列的平均值替换列中的零值,对于所有具有零值的列

python - Darksky 循环一年的每日数据 - 日期时间错误

logging - Apache 电锯的继任者?

logging - 如何在Kubernetes Pod中从一个容器访问另一个容器stdout和stderr

c# - 如何在 MongoDB C# Driver 2.0 中记录我的查询?

python - 通过 .sh 或 .desktop 文件执行 python 脚本不起作用

python - 在 Python 字典中按值(降序)排序,然后按键(升序)排序

database - 是什么减慢了您项目的开发速度,您是如何克服它的?

sql - 如何在数据库中存储级联类别

mysql - 空表上的 LEFT JOIN NULL 结果