【问题标题】:Django: Loading data from an APIDjango:从 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,因此答案不需要过多地关注这方面。

【问题讨论】:

    标签: xml django api loading


    【解决方案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 听起来和我需要做的完全一样,但是之后添加对象所需的语法是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2014-11-16
    • 2023-03-13
    • 2012-12-31
    • 2017-10-22
    相关资源
    最近更新 更多