1

我有一个脚本可以扫描电子邮件收件箱中的特定电子邮件。该部分运行良好,我能够获取我感兴趣的数据。我现在想获取该数据并将其添加到 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 存储它们。

4

8 回答 8

3

我认为芹菜是你要找的。

于 2012-07-05T17:37:18.877 回答
2

您可以编写自定义管理命令以根据需要加载数据并通过 cron 作业运行该命令。您可以参考编写自定义命令

您也可以尝试现有的 loaddata 命令,但它会尝试从您的应用目录中添加的夹具加载数据。

于 2012-07-05T17:35:49.897 回答
1

暂时忘记这是一个 Django 应用程序。它只是一堆 Python 代码。

这意味着,您的 Python 脚本完全可以自由地导入您在 Django 应用程序中拥有的数据库模型,并像在项目的标准模块中一样使用它们。

这里唯一的区别是,您可能需要注意导入 Django 使用这些模块所需的所有内容,而当请求通过正常的 Web 界面进入时,它会为您处理这些。

只需从您的应用程序中导入 Django 和所需的 models.py/您需要的任何其他模块即可。这是您的代码,而不是黑匣子。你可以从任何你想要的地方导入它。

编辑: Rohan 对自定义管理命令的 Django 文档的回答中的链接绝对是我上面所说的最不痛苦的方法。

于 2013-04-20T21:49:57.223 回答
1

我也做过同样的事情。

首先,我的脚本已经在解析电子邮件并将它们存储在数据库中,因此我在 settings.py 中设置了数据库,并用于python manage.py inspectdb基于该数据库创建模型。

然后只需构建一个视图来显示来自您的数据库的信息。

如果您的脚本还没有使用数据库,那么创建一个包含您想要存储的信息的模型会很简单,然后强制您的脚本写入模型描述的表。

于 2013-04-20T21:19:17.610 回答
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()
于 2012-07-05T17:40:13.917 回答
0

当您说“将数据输入 DJango 应用程序”时,您到底是什么意思?

我猜你正在使用某种数据库(如mysql)。将您从 cronjob 收集的任何数据插入到 Django 应用程序正在访问的相应表中。还要将此 cron 数据插入到您的用户正在访问的相同表中。这样一来,您的更改会立即反映给使用该应用程序的用户,因为他们将从同一个表中访问数据。

于 2012-07-05T17:35:39.383 回答
0

最好的办法?

在 django 端创建一个视图来处理接收数据,并让您的脚本在注册到该视图的 URL 上执行 HTTP POST。

您也可以从脚本中导入模型等,但我认为这不是一个好主意。

于 2012-07-05T17:35:42.410 回答
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 语句中添加分钟。

于 2012-07-05T18:35:52.953 回答