Django:从API加载数据

时间:2010-11-04 16:57:08

标签: xml django api loading

我对Django很新,但我对基本概念有很好的把握。我对Python有很好的了解。我有一个应用程序,我希望能够定期将数据加载到我的应用程序中(现在加载一个视图)。

此数据来自网络上的XML API。为简单起见,假设我在Django中只有一个模型:

class Event(models.model):
  title = models.CharField(max_length=200)
  location = models.CharField(max_length=200)
  date = models.DateField()

我想要加载的XML与此模型非常接近。举个例子:

<nextevent>
  <title>My Conference</title>
  <location>London, UK</location>
</nextevent>

XML可能会改变,但每次加载视图时,我都想加载当前事件并将其作为对象存储在我的Django应用程序中。对于这个例子,我不关心检查重复项。

我的问题是,在哪里(结构上)是执行加载此数据的最佳位置,以及如何在Django中以编程方式创建这些对象?

注意:我很高兴使用lxmlurllib来解析和加载XML,因此答案不需要过多地讨论这个问题。 < / p>

1 个答案:

答案 0 :(得分:3)

这取决于您希望加载何时发生。如果每次用户访问网页(视图)时都要查询API并将结果放入数据库,那么我将在视图函数中执行此操作。

如果您想定期或不响应传入的HTTP请求,那么最简单的选择是使用cron启动管理命令 - 将代码放入app / management /命令然后使用cron运行manage .py。这可以访问所有Django ORM等。

稍微复杂一点就是将Django库导入到一个直接的Python脚本中,该脚本可以在任何可以运行Python的地方运行。

对于管理命令案例,您可以像在普通的Django视图中一样访问ORM:

event = Event()
event.title = xml.title
event.location = xml.location
event.save()

假设您已将XML加载并解析为名为xml的合适对象。如果您想成为闪存者,可以使用序列化框架自动解析和加载XML - 但前提是您可以匹配XML格式。