2010-11-04 47 views
0

我對Django相當陌生,但我對基本概念有很好的理解。我對Python有很好的瞭解。我有一個應用程序,我希望能夠定期將數據加載到我的應用程序中(現在通過加載視圖)。Django:從API中加載數據

此數據來自網絡上的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,因此回答不需要在這方面留言太多。

回答

3

這取決於您希望何時發生加載。如果每次用戶轉到網頁(視圖)時都會遇到這種情況,那麼您需要查詢API並將結果放入數據庫中,然後在視圖函數中執行該操作。

如果您希望定期或不響應傳入的HTTP請求,那麼最簡單的選擇是使用cron啓動管理命令 - 將代碼放入app/management /命令中,然後使用cron運行manage.py。這可以訪問所有的Django ORM等。

稍微複雜一點就是將Django庫導入一個直接的Python腳本,該腳本可以運行在任何可以運行Python的位置。

對於管理命令的情況下,可以訪問ORM酷似在正常的Django視圖:

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

假設已經裝載和分析的XML成稱爲XML合適的對象。如果你想要更新,你可以使用序列化框架來自動分析和加載你的XML - 但只有你可以匹配XML格式。

+0

嗨馬爾科姆,應用程序/管理/命令和cron聽起來完全像我需要做的,但是之後添加對象需要什麼語法? – 2010-11-04 17:17:36