首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RESTful APIV.S.数据库的Django管理

使用RESTful APIV.S.数据库的Django管理
EN

Stack Overflow用户
提问于 2012-01-26 01:56:09
回答 1查看 5.2K关注 0票数 13

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

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

所以,我的问题是,是否有一种方法可以操纵Django的模型层来直接访问我们的API,而不是直接与数据库通信呢?模型层作为客户端向管理中心传递请求和响应。

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

EN

回答 1

Stack Overflow用户

发布于 2016-07-15 20:42:46

我记得我曾经想过要做这样的事。当时,我使用自定义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,那么是否有可能升级API?

根据用例,可能还有很多其他需要考虑的事项,例如:

  • 数据的完整性
  • 支持交易
  • 查询的时间可能比仅仅查询本地(甚至远程)数据库要高得多。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9013099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档