Как я могу периодически запускать скрипт Python для импорта данных в приложение Django?

У меня есть сценарий, который сканирует почтовый ящик для конкретных писем. Эта часть работает хорошо, и я могу получить данные, которые меня интересуют. Теперь я хотел бы взять эти данные и добавить их в приложение Django, которое будет использоваться для отображения информации.

Я могу запустить скрипт на задании CRON, чтобы периодически получать новую информацию, но как мне затем передать эти данные в приложение Django?

Сервер Django работает под управлением Linux под Apache / FastCGI, если это имеет значение.

[Изменить] - в ответ на вопрос Срикара When you are saying " get that data into the Django app" what exactly do you mean?...

Приложение Django будет отвечать за хранение данных в удобной форме, чтобы затем их можно было отображать в виде последовательности представлений. Таким образом, приложение будет включать модель с подходящими членами для хранения входящих данных. Я просто не уверен, как вы подключаетесь к Django, чтобы создавать новые экземпляры этих модельных объектов, и просите Django хранить их.

8 ответов

Я думаю, что сельдерей это то, что вы ищете.

Вы можете написать пользовательскую команду администратора для загрузки данных в соответствии с вашими потребностями и запустить эту команду через задание cron. Вы можете сослаться написание пользовательских команд

Вы также можете попробовать существующую команду loaddata, но она пытается загрузить данные из прибора, добавленного в каталог вашего приложения.

Я сделал то же самое.

Во-первых, мой скрипт уже анализировал электронные письма и сохранял их в БД, поэтому я установил БД в settings.py и использовал python manage.py inspectdb создать модель на основе этой базы данных.

Тогда это просто вопрос построения представления для отображения информации из вашей базы данных.

Если ваш сценарий еще не использует базу данных, было бы просто создать модель с той информацией, которую вы хотите сохранить, а затем заставить свой сценарий записывать в таблицы, описанные моделью.

Забудьте об этом на секунду как о приложении Django. Это просто загрузка кода Python.

Это означает, что ваш скрипт на Python абсолютно бесплатно может импортировать модели баз данных, которые есть в вашем приложении Django, и использовать их так же, как в стандартном модуле вашего проекта.

Единственное отличие здесь в том, что вам может потребоваться позаботиться об импорте всего, что нужно Django для работы с этими модулями, тогда как, когда запрос поступает через обычный веб-интерфейс, он позаботится об этом за вас.

Просто импортируйте Django и требуемые models.py/any другие модули, необходимые для его работы, из вашего приложения. Это твой код, а не черный ящик. Вы можете импортировать его из любого места, какого черта вы хотите.

РЕДАКТИРОВАТЬ: ссылка из ответа Рохана на Django документы для пользовательских команд управления, безусловно, наименее болезненный способ сделать то, что я сказал выше.

Пусть ваш скрипт отправит запрос HTTP Post следующим образом. Это библиотека запросов

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

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

затем на принимающей стороне вы можете использовать web.py для обработки информации, подобной этой

x = web.input()

тогда делай что хочешь с х

На принимающей стороне POST-запроса импортируйте веб и напишите функцию, которая обрабатывает сообщение

например

    def POST(self):

        x = web.input()

Если вы не хотите использовать HTTP для отправки сообщений туда и обратно, вы можете просто попросить сценарий записать информацию об электронной почте в файл.txt, а затем приложение django откроет файл и прочитает его.

РЕДАКТИРОВАТЬ:

Вы можете настроить свою работу в CRON на чтение электронных писем, скажем, в 8:00, а затем записать их в текстовый файл info.txt. В вашем коде напишите что-то вроде

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

который проверит файл в 9 утра до 10 утра. если вы хотите, чтобы он проверялся только один раз, просто добавьте также и инструкцию if.

Лучший способ?

Создайте представление на стороне django для обработки получения данных, и пусть ваш скрипт выполнит HTTP POST для URL, зарегистрированного для этого представления.

Вы также можете импортировать модель и тому подобное из вашего скрипта, но я не думаю, что это очень хорошая идея.

Когда вы говорите "введите эти данные в приложение DJango", что именно вы имеете в виду?

Я предполагаю, что вы используете какую-то базу данных (например, MySQL). Вставьте все данные, которые вы собрали из своего cronjob, в соответствующие таблицы, к которым обращается ваше приложение Django. Также вставьте эти данные cron в те же таблицы, к которым обращаются ваши пользователи. Таким образом, ваши изменения будут немедленно отражены для пользователей, использующих приложение, так как они будут получать доступ к данным из той же таблицы.

Другие вопросы по тегам