Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django管理员使用RESTful API v.s.数据库_Python_Rest_Django Models_Django Admin - Fatal编程技术网

Python Django管理员使用RESTful API v.s.数据库

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,而不是直接与数据库通信?模型层将充当向管理中心传

这是一个有点奇怪的问题,我知道,但请容忍我。我们已经为我们的一个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()
    操作,您可以通过获取整个数据并使用
    len()
    在python中对其进行计数来模拟该操作,但这是否合理
  • 如果它们仍然是一些您无法处理的查询(可能性更大):是否涵盖了所有“常见”查询(在本例中,Django Admin可能使用的所有查询),并且如果最近发现了未覆盖的情况或Django的未来版本中引入了未覆盖的情况,是否可以升级API
根据用例,可能需要考虑很多其他因素,例如:

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

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