Python Django管理员使用RESTful API v.s.数据库
这是一个有点奇怪的问题,我知道,但请容忍我。我们已经为我们的一个iPhone应用程序开发了一个使用Python的RESTful平台。webapp版本是使用Django构建的,Django也使用了这个API。我们认为使用Django的内置控制面板功能来帮助管理数据是一个好主意 这本身不是问题所在。问题是,每个人都认为最好的管理中心本质上是一个位于RESTful平台之上的客户端 所以,我的问题是,有没有办法操纵Django的模型层直接访问我们的API,而不是直接与数据库通信?模型层将充当向管理中心传递请求和响应以及从管理中心传递请求和响应的客户端Python Django管理员使用RESTful API v.s.数据库,python,rest,django-models,django-admin,Python,Rest,Django Models,Django Admin,这是一个有点奇怪的问题,我知道,但请容忍我。我们已经为我们的一个iPhone应用程序开发了一个使用Python的RESTful平台。webapp版本是使用Django构建的,Django也使用了这个API。我们认为使用Django的内置控制面板功能来帮助管理数据是一个好主意 这本身不是问题所在。问题是,每个人都认为最好的管理中心本质上是一个位于RESTful平台之上的客户端 所以,我的问题是,有没有办法操纵Django的模型层直接访问我们的API,而不是直接与数据库通信?模型层将充当向管理中心传
我相信这是可能的,但我不确定从哪里开始。有什么意见吗?我记得我曾经想过要做这样的事情。当时,我使用自定义查询集创建了一个自定义管理器。我覆盖了一些方法,例如
\u filter\u或
,count()
,exists()
,select\u related()
。。。并添加了一些属性。不到一个星期就变得一团糟,可能一天都没有机会工作。所以我立即停止了一切,找到了一个更合适的解决方案
如果我必须再做一次,我会花很长时间考虑其他选择。如果这听起来真的是最好的做法,我可能会创建一个自定义数据库后端。该后端不会将Django ORM查询转换为SQL查询,而是将它们转换为HTTP请求
要做到这一点,我认为最好的起点是熟悉
我也认为在开始这样的发展之前有一些重要的事情要考虑:
- API能够处理任何Django ORM请求吗?换句话说:任何Django ORM查询都可以翻译成API请求吗
- 如果不是,是否可以安全地忽略“不可翻译”查询?例如,
子句可以安全地忽略。而orderby
子句不太可能被安全地解除GROUP BY
- 如果一些查询既不能翻译也不能忽略,那么可以合理地模拟它们。例如,如果您的API不支持
操作,您可以通过获取整个数据并使用COUNT()
在python中对其进行计数来模拟该操作,但这是否合理len()
- 如果它们仍然是一些您无法处理的查询(可能性更大):是否涵盖了所有“常见”查询(在本例中,Django Admin可能使用的所有查询),并且如果最近发现了未覆盖的情况或Django的未来版本中引入了未覆盖的情况,是否可以升级API
- 数据的完整性
- 支持交易
- 查询的时间可能比仅查询本地(甚至远程)数据库要高得多