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 中以编程方式创建这些对象?
注意:我很高兴使用 lxml
和 urllib
来解析和加载 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 模板?