2012-07-05 25 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文档定制管理命令的链接绝对是做我上面所说的最不痛苦的方式。

相关问题