我对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,因此答案不需要过多地讨论这个问题。 < / p>
答案 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格式。