我知道这是一个奇怪的问题,但请耐心等待。 我们为我们的iPhone应用程序开发了一个使用Python的RESTful平台。 webapp版本是使用Django构建的,它也使用了这个API。 我们认为使用Django的内置控制面板功能来帮助管理数据是个好主意。
这本身不是问题。 问题是每个人都认为管理中心本身就是一个位于RESTful平台之上的客户端。
所以,我的问题是,有没有办法操纵Django的模型层直接访问我们的API,而不是直接与数据库通信? 模型层将充当客户端向管理中心传递请求和响应。
我确信这是可能的,但我不确定我会从哪里开始。 有什么输入?
我记得我曾经想过做这样的事情。 那时,我使用自定义QuerySet创建了一个自定义管理器。 我覆盖了一些方法,如_filter_or_exclude()
, count()
, exists()
, select_related()
,...并添加了一些属性。 花了不到一个星期的时间就变成了一个可能有一天没有机会工作的混乱。 所以我立即停止了一切,找到了更合适的解决方案。
如果我不得不再次这样做,我会花很长时间考虑替代方案。 如果它真的是最好的事情,我可能会创建一个自定义数据库后端。 这个后端不是将Django ORM查询转换为SQL查询,而是将它们转换为HTTP请求。
为此,我认为最好的出发点是熟悉有关数据库后端的django源代码 。
我认为在开始这样的开发之前还有一些重要的事情需要考虑:
ORDER BY
子句可能是安全不容忽视。 虽然GROUP BY
条款不太可能被安全驳回。 COUNT()
操作,您可以通过获取整个数据并使用len()
在python中计算它来模拟它,但这是否合理? 根据用例,可能需要考虑其他许多因素,例如: