Django Admin使用RESTful API vs.数据库

问题描述 投票:11回答:1

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

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

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

我确信这是可能的,但我不确定我会从哪里开始。 有什么输入?

python rest django-models django-admin
1个回答
3
投票

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

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

为此,我认为最好的出发点是熟悉有关数据库后端的django源代码

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

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

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

  • 数据的完整性
  • 支持交易
  • 查询的时间可能比查询本地(甚至远程)数据库要高得多。
© www.soinside.com 2019 - 2024. All rights reserved.