2012-07-05 60 views
1

我有一個腳本可以掃描特定電子郵件的電子郵件收件箱。該部分運行良好,我可以獲取我感興趣的數據。現在我想將這些數據添加到將用於顯示信息的Django應用程序中。如何定期運行Python腳本以將數據導入Django應用程序?

我可以在CRON作業上運行腳本來定期抓取新信息,但是如何將這些數據導入到Django應用程序中?

Django的服務器上在Apache/FastCGI的Linux機器上運行,如果有差別。

[編輯] - 響應Srikar的問題When you are saying " get that data into the Django app" what exactly do you mean? ...

Django的應用程序將負責在方便的形式存儲數據,這樣它就可以通過一系列的意見顯示。因此,該應用程序將包含一個模型和適當的成員來存儲傳入的數據。我只是不確定如何鉤入Django來創建這些模型對象的新實例並告訴Django存儲它們。

回答

0

當你說:「獲得這些數據到Django應用程序」究竟是什麼意思呢?

我猜你正在使用某種形式的數據庫(如MySQL)的。將您從cronjob收集的任何數據插入到您的Django應用程序正在訪問的相應表中。還要將此cron數據插入到用戶正在訪問的相同表中。這樣,您的更改會立即反映給使用該應用程序的用戶,因爲他們將訪問來自同一個表的數據。

+0

我編輯了我的問題,以澄清 – 2012-07-05 17:49:03

0

最好的方法?

在django端創建一個視圖來處理接收數據,並讓您的腳本對註冊到該視圖的URL執行HTTP POST。

您也可以從腳本內部導入模型等,但我認爲這不是一個好主意。

+0

似乎低效率,我要通過網絡服務器來做到這一點,而不是掛鉤到後端一些如何? – 2012-07-05 17:42:44

1

您可以根據您的需要和運行通過cron作業命令編寫自定義管理命令加載數據。您可以參考Writing custom commands

您也可以嘗試現有的loaddata命令,但它會嘗試從您的應用程序目錄中添加的燈具加載數據。

+0

看起來很有希望。你將在CRON中使用什麼命令來調用命令? – 2012-07-05 17:58:39

+0

@JonCage你可以參考http://stackoverflow.com/questions/1601153/django-custom-command-and-cron關於如何從cron運行命令。 – Rohan 2012-07-06 04:04:22

4

我覺得Celery是你在找什麼。

+0

這是如何幫助我將數據插入到DJango應用程序?據我所知,這隻會取代CRON的工作,或者我錯過了什麼? – 2012-07-05 17:56:10

+0

嗯,好的更有意義的一些背景:http://www.slideshare.net/idangazit/an-introduction-to-celery – 2012-07-05 18:01:23

+0

更多文檔在這裏:http://celery.github.com/celery/django/first -step-with-django.html – 2012-07-05 18:05:21

0

讓你的腳本像這樣發送HTTP POST請求。這是圖書館請求

>>> files = {'report.xls': open('report.xls', 'rb')} 

>>> r = requests.post(url, files=files) 
>>> r.text 

然後在接收端可以使用網頁。PY來處理這樣的

x = web.input() 

的信息,然後做你想做的與X

在POST請求的進口網絡的接收端和編寫處理後

例如

功能
def POST(self): 

     x = web.input() 
+0

上面的代碼段中的請求和網絡是什麼?你能提供一個更完整的例子嗎? – 2012-07-05 17:52:20

+0

請求文檔可以在http://docs.python-requests.org/en/latest/user/quickstart/#more-complicated-post-requests找到,處理請求的web.py可在http:// webpy.org/我剛剛編寫了一個程序,基本上完成了與你想要做的完全相同的事情,使用這兩個libs – SJP 2012-07-05 18:27:53

+0

所以web.py是一個輕量級服務器,可以處理POST/GET請求?這不是我想要的 - 我在服務器上有DJango來接收數據,我只是不確定我怎樣稱之爲DJango的相關位來導入數據... – 2012-07-05 22:08:24

0

如果您不想使用HTTP來回發送消息,您可以讓腳本將電子郵件信息寫入.txt文件,然後讓您的django應用程序打開文件並閱讀它。

編輯:

你可以設置你的cron作業閱讀比如說早上8點的電子郵件,然後將其寫入一個文本info.txt文件。在你的代碼中寫入類似於

import time 
    if '9' == time.strftime("%H"): 
     file = open(info.txt) 
     info = file.read() 

它將在上午9點之前檢查文件,直到上午10點。如果你想只檢查一次,只需添加if語句的分鐘數。

+0

你會如何觸發DJango應用程序來閱讀文件?我希望它定期執行檢查並自動填寫信息。你會如何觸發DJango閱讀這些.txt文件? – 2012-07-05 22:09:55

+0

查看我發佈的回覆。 – SJP 2012-07-06 11:56:58

+0

這沒有幫助 - 你從哪裏打電話?一個模型?一個看法? – 2012-07-06 15:03:35

0

我做了同樣的事情。

首先,我的腳本已經解析了電子郵件並將它們存儲在一個數據庫中,因此我將該數據庫設置在settings.py中,並使用python manage.py inspectdb來創建基於該數據庫的模型。

然後這只是一個建立一個視圖來顯示你的數據庫信息的問題。

如果您的腳本尚未使用數據庫,那麼使用您想要存儲的信息創建模型會很簡單,然後強制您的腳本寫入模型描述的表格。

1

忘掉這是一個Django應用程序的第二個。這只是一個Python代碼的負載。

這意味着,您的Python腳本完全可以導入您在Django應用程序中使用的數據庫模型,並像您在項目中的標準模塊中那樣使用它們。

這裏唯一的區別是,您可能需要小心導入Django需要與這些模塊一起工作的所有內容,而當請求通過正常的Web界面進入時,它會爲您照顧。

只需導入Django和所需的models.py /你需要的其他模塊,它就可以在你的應用中工作。這是你的代碼,而不是黑匣子。你可以從任何你想要的地方導入它。

編輯:從Rohan的答案到Django文檔定製管理命令的鏈接絕對是做我上面所說的最不痛苦的方式。

相關問題