我有一个脚本可以扫描电子邮件收件箱中的特定电子邮件。那部分工作得很好,我能够获得我感兴趣的数据。我现在想把这些数据添加到Django应用程序中,用于显示信息。
我可以在CRON作业上运行脚本来定期获取新信息,但是如何将这些数据导入Django应用程序?
Django服务器在Apache / FastCGI下的Linux机器上运行,如果这有所不同。
[编辑] - 回应斯里卡的问题When you are saying " get that data into the Django app" what exactly do you mean?
......
Django应用程序将负责以方便的形式存储数据,以便可以通过一系列视图显示它。因此,应用程序将包含一个具有合适成员的模型来存储传入的数据。我只是不确定你是如何挂钩Django来创建那些模型对象的新实例并告诉Django存储它们。
答案 0 :(得分:4)
我认为Celery正是您所寻找的。 p>
答案 1 :(得分:2)
您可以根据需要编写自定义管理命令来加载数据,并通过cron作业运行该命令。您可以参考Writing custom commands
您也可以尝试使用现有的loaddata命令,但它会尝试从应用目录中添加的fixture中加载数据。
答案 2 :(得分:1)
暂时忘记这是一个Django应用程序。它只是一堆Python代码。
这意味着,您的Python脚本可以完全免费导入Django应用程序中的数据库模型,并像在项目的标准模块中一样使用它们。
这里唯一的区别是,您可能需要注意导入Django需要使用这些模块的所有内容,而当请求通过正常的Web界面进入时,它会为您处理。
只需从您的应用程序导入Django和所需的models.py/所需的其他模块即可。这是你的代码,而不是黑盒子。你可以从你想要的地方导入它。
编辑: Rohan对自定义管理命令的Django文档的回答链接绝对是我上面所说的最不痛苦的方法。
答案 3 :(得分:0)
当您说“将数据输入DJango应用程序”时,您究竟是什么意思?
我猜你正在使用某种数据库(比如mysql)。将您从cronjob收集的任何数据插入Django应用程序正在访问的相应表中。还要将此cron数据插入用户正在访问的相同表中。这样,您的更改会立即反映给使用该应用的用户,因为他们将从同一个表中访问数据。
答案 4 :(得分:0)
最好的方式?
在django端创建一个视图来处理接收数据,让你的脚本对注册到该视图的URL进行HTTP POST。
您也可以从脚本中导入模型等,但我认为这不是一个好主意。
答案 5 :(得分:0)
让您的脚本发送HTTP Post请求。这是库请求
>>> files = {'report.xls': open('report.xls', 'rb')}
>>> r = requests.post(url, files=files)
>>> r.text
然后在接收方,你可以使用web.py来处理这样的信息
x = web.input()
然后用x
做任何你想做的事在POST请求的接收方导入Web并编写处理帖子的函数
例如
def POST(self):
x = web.input()
答案 6 :(得分: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语句。
答案 7 :(得分:0)
我做了同样的事情。
首先,我的脚本已经解析了电子邮件并将它们存储在数据库中,所以我在settings.py中设置了db,并使用python manage.py inspectdb
基于该数据库创建模型。
然后,只需构建一个视图来显示数据库中的信息。
如果您的脚本尚未使用数据库,那么创建一个包含您想要存储的信息的模型会很简单,然后强制您的脚本写入模型描述的表。