【问题标题】:Writing a Django backend program that runs indefinitely -- what to keep in mind?编写一个无限期运行的 Django 后端程序——要记住什么?
【发布时间】:2016-02-27 09:02:11
【问题描述】:

我正在尝试编写一个 Django 应用程序,该应用程序可以查询远程数据库中的某些数据,对这些数据的一部分执行一些计算并存储结果(使用 Django 模型在本地数据库中)。它还过滤另一部分并单独存储结果。然后我的前端查询我的 Django 数据库以获取这些处理过的数据并将它们显示给用户。

我的问题是:

  1. 如何编写一个在后端连续运行、从远程数据库下载数据、进行计算/过滤并将结果存储在本地 Django 数据库中的代理程序?特别是,在编写无限期运行的程序时要记住的最重要的事情是什么? 为此目的使用 cron 是个好主意吗?

  2. 从远程数据库检索的数据属于多个用户,每个用户的数据也必须单独保存/存储在我的本地数据库中。我该如何做到这一点?也许使用行级/类实例级权限?请记住,后端代理负责存储、更新和删除。前端只读取数据(通过 http 请求)。

  3. 最后,我允许创建新用户。如果新用户拥有远程数据库的有效凭据,则应允许该用户使用我的应用程序。在这种情况下,我的后端将从远程数据库下载这个特定用户的数据,执行计算/过滤并将结果呈现给用户。如何为新用户处理对象/数据库表的动态创建?以及在检索用户数据时如何区分它们?

非常感谢具有 Django 知识的经验丰富的程序员的回答。谢谢你。

【问题讨论】:

    标签: python django database django-models django-authentication


    【解决方案1】:

    对于

    1) 定时和后台任务的标准启动解决方案是具有 Django 集成的 Celery。还有其他的,比如 Huey https://github.com/coleifer/huey

    2) 通常的解决方案是每一行都包含该数据所属的 user_id 列。这使用 Django ORM 的 ForeignKey 字段映射到用户模型。您的用户是需要直接查询数据库还是有直接的数据库帐户?如果没有,那么这个解决方案就足够了。听起来您的前端有 1 个数据库连接,所有权限逻辑都由前端处理,而不是数据库本身。

    3) 见 2

    【讨论】:

    • 谢谢 Mikko。用户发送 http 请求,视图处理请求,因此无需直接访问数据库。
    • 为拥有它的每一行拥有单独的 user_id 列(用户字段)就足够了。然后只需将其用作过滤条件Data.objects.filter(user=request.user)
    猜你喜欢
    • 2020-03-24
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多