Django:从 API 加载数据

Posted

技术标签:

【中文标题】Django:从 API 加载数据【英文标题】:Django: Loading data from an API 【发布时间】:2011-05-05 04:33:27 【问题描述】:

我对 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,因此答案不需要过多地关注这方面。

【问题讨论】:

【参考方案1】:

这取决于您希望何时加载。如果真的是每次用户访问网页(视图)时都想查询 API 并将结果放入数据库中,那么我会在视图函数中进行。

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

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

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

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

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

【讨论】:

嗨 Malcolm,app/management/commands 和 cron 听起来和我需要做的完全一样,但是之后添加对象所需的语法是什么?

以上是关于Django:从 API 加载数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Django ORM 将 JSON 文件中的数据加载到 MySQL 实例中?

Django 1.6.5 - 无法从夹具加载初始数据

从数据库加载 django 模板

如何在谷歌应用引擎上将帖子从数据库异步加载到 django 模板?

Django CMS 自定义插件从 cms_title 加载数据

如何解析json数据并将其加载到django模板