【问题标题】:Django database watchdog save signal outside djangoDjango 数据库看门狗在 Django 外部保存信号
【发布时间】:2013-01-12 18:00:05
【问题描述】:

我有以下问题: 我正在使用 Django 框架。 系统中的一部分(非 django)写入数据库,在 django 使用的同一数据库中。 我想在保存对象时发出信号。它是一个django模型对象,但不是通过django保存的,而是直接在mysql数据库中。

当 django 没有保存数据库时,django 有什么方法可以查看其数据库中的保存操作?

最简洁的方法是:创建一个 Api,并让保存操作通过该 api 运行。保存信号可以是 django 默认的。 (但这取决于外部的一些工作......所以不是首选路线......对于未来的发展来说肯定是)。

另一种选择是实现 celery 并创建一个任务,该任务经常查看其中一个保存的对象是否没有后续行动.....(我想也放弃一些令人费解的问题以使其启动并运行)

但可能有一个更简单的……对我来说未知? 我看到了针对文件系统的 django 看门狗解决方案……不是针对数据库的(可能是因为 django 内置了这个……当通过 django 正确完成时)

使其复杂化:我使用 sqlite 在本地进行测试和开发....但是我可以将保存信号放入我的测试中而无需在本地工作....只要它在 mysql 中工作,我很高兴.

【问题讨论】:

    标签: mysql django django-signals watchdog


    【解决方案1】:

    你可以试试这个解决方案:

    1. 使用一列“object_id”创建一个新表“django_watch”(根据您的标准添加其他列,如“created_datetime”等);

    2. 假设您的主表是“object”。为该表上的 INSERT 事件添加 mysql trigger

    3. 您应该在触发器中添加一个额外的插入查询,以将 object_id 插入到“django_watch”表中。

    4. 现在您可以有一个 cronjob 来检查新表 'django_watch'(用于 Django 对象中的更新)并执行必要的操作。您可以延迟 1 分钟(由您决定)连续运行此 cronjob。

    【讨论】:

    • 嗨@michel.iamit 如果这有帮助,请告诉我。
    • 感谢这个选项,很高兴知道我可以在 mysql 中设置触发器,但是......为什么不让 cronjob 直接查看表呢?我现在正在研究 celery... 我发现 crontab 作业不能安排在 1 分钟以下(除了使用一些技巧)。幸运的是,除了 cronjob 之外,celery 还有其他对象用于短任务...... mysql 中的额外设置和 cronjob...... 对我来说感觉就像让管理变得更加复杂......
    【解决方案2】:

    最后我写了一个可以被第三方模块调用的api。我使用 c-code 将代码交付到 django 上登录到这个 api 并调用这个 api 的 GET。 (使用 django rest 框架)。这个 api 只是保存对象(在 url 中给出的 id),然后从那里开始它是默认的 django。第三方唯一需要做的就是在我的代码中构建来调用 api....

    也许不是最好的解决方案,但对我的问题来说是最好的实现......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2013-08-23
      相关资源
      最近更新 更多