【问题标题】:Django Admin using RESTful API v.s. DatabaseDjango Admin 使用 RESTful API vs.数据库
【发布时间】:2012-01-26 01:56:09
【问题描述】:

这是一个有点奇怪的问题,我知道,但请耐心等待。我们使用 Python 为我们的一个 iPhone 应用程序开发了一个 RESTful 平台。 webapp 版本是使用 Django 构建的,它也使用了这个 API。我们认为使用 Django 的内置控制面板功能来帮助管理数据是一个好主意。

这本身不是问题。问题是每个人都认为最好的管理中心本质上是一个位于 RESTful 平台之上的客户端。

那么,我的问题是,有没有办法操纵 Django 的模型层直接访问我们的 API,而不是直接与数据库通信?模型层将充当客户端,向管理中心传递请求和响应。

我确信这是可能的,但我不确定从哪里开始。有什么意见吗?

【问题讨论】:

  • 没有什么是不可能的,但听起来工作量很大。如果您可以将 django 连接到数据库,您将节省大量时间。我可以理解将其用作 API 测试应用程序的愿望,但也许您可以制作一个不同的应用程序,甚至编写测试用例。
  • 看起来工作量超过了它的价值。您可能需要查看模型管理器或自定义数据库后端。
  • 威廉,我也面临同样的情况。你有没有按照你的意愿解决它,还是你放弃并直接访问数据库?
  • @JoaoPSF 自从我发表这篇文章以来,发生了很多变化,但最后,我们只是为管理面板创建了一个单独的 Flask 应用程序。话虽如此,不久之后我们就放弃了 Django。
  • 我一直在尝试一种不同的方法,序列化 ModelAdmin 对象以创建一个 API,该 API 为客户端管理员提供必要的信息,以了解如何管理保存在 Django 端的数据。

标签: python rest django-models django-admin


【解决方案1】:

我记得我曾经想过做这样的事情。当时,我使用自定义 QuerySet 创建了一个自定义管理器。我覆盖了一些方法,例如_filter_or_exclude()count()exists()select_related(),......并添加了一些属性。用了不到一周的时间,就变成了可能一天都没有机会工作的一团糟。于是我立即停止了一切,找到了更合适的解决方案。

如果我必须再做一次,我会花很长时间来考虑替代方案。如果这听起来真的是最好的事情,我可能会创建一个自定义数据库后端。这个后端不会将 Django ORM 查询转换为 SQL 查询,而是将它们转换为 HTTP 请求。

为此,我认为最好的起点是熟悉django source code concerning database backends

我还认为在开始此类开发之前需要考虑一些重要的事情:

  • API 是否能够处理任何 Django ORM 请求?换句话说:任何 Django ORM 查询都可以转换为 API 请求吗?
  • 如果不是,是否可以安全地忽略“不可翻译”的查询?例如,ORDER BY 子句可能可以安全地忽略。虽然 GROUP BY 子句不太可能被安全地驳回。
  • 如果某些查询既不能被翻译也不能被忽略,可以合理地模拟它们。例如,如果您的 API 不支持 COUNT() 操作,您可以通过获取整个数据并在 python 中使用 len() 对其进行计数来模拟它,但这合理吗?
  • 如果它们仍然是一些您将无法处理的查询(这很可能):是否涵盖了所有“常见”查询(在这种情况下,所有查询都可能被 Django 管理员使用)?如果最近发现未发现的案例或在未来版本的 Django 中引入,是否可以升级 API?

根据用例,可能还有很多其他因素需要考虑,例如:

  • 数据的完整性
  • 交易支持
  • 查询的时间可能远高于仅查询本地(甚至远程)数据库。

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 2010-10-13
    • 2012-05-22
    • 2019-08-31
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    相关资源
    最近更新 更多