2012-04-05 56 views
1

我已经在几个应用程序中使用CakePHP,现在我正在Django中构建我的第一个应用程序。Django中的CakePHP数据源

在CakePHP中,datasource是模型和数据源之间的链接。它可能依赖于ORM或者可能访问来自外部来源(如API)的数据。

我想弄清楚如何在非-ORM数据源的Django中执行相同的操作(例如默认为Models),以便使用外部API进行操作。

如果您能以正确的方式指向我,我将非常感激。

谢谢!

回答

0

这个概念不匹配Django和蛋糕之间。在Django中,模型显式地是一个映射到数据库的ORM。尽管我想你可以编写一个违反该规则的自定义后端,这似乎很痛苦。

但是,有很多使用非传统数据库源的例子,例如在django中使用mongo文档。如果您对python有更深入的理解,那么设计一个基类可以相对容易,该基类处理将API包装到对象实例中所需的所有详细信息。但是,这不会是Django中开箱即用的东西。可能有第三方应用程序提供该功能,但我并不知道有一个应用程序可以提供该功能。自己做这些事情不会比在蛋糕中做的事情复杂得多,IE中的蛋糕非数据库数据源需要代码来提出请求并解析响应,并且这样做不仅仅是神奇地知道如何处理任何API。

如果你不想写封装所有调用api和构造一个模型样式类以包含所有逻辑的行为,那么在django中处理该类的一般方法就是使用urllib2 (如果这是一个远程API源)并解析请求的结果。

+0

谢谢约翰的回答!其实我已经有了一个包装与API通信的模块。我正在将模块导入视图,并将所需的数据发送到模板。 但是,我认为应该有一个更好的/标准的方法来做到这一点...例如,如果我需要写入API,我应该如何定义我的表单? – tufla 2012-04-05 18:18:42

+0

那么你将不会拥有由ModelForms提供的好东西(除非你重新实现了API后端的逻辑)。但是,您可以简单地使用普通窗体并处理从视图代码中写入API的操作......或者更好的方法是在处理写入的窗体中添加一个方法。你甚至可以创建一个从Form继承而来的类,但是实现了类似'def write()'和谁的init接受一个url。然后'write()'遍历clean_data并以一种非常通用的方式正确地发布数据。 – John 2012-04-06 19:10:56