Запланировать загрузку файла через Django - PullRequest
0 голосов
/ 01 августа 2020

Как заказать Django Приложение, которое проверяет наличие файла (по ссылке) каждый день и загружает его при соблюдении некоторых условий. Скажем, в псевдокоде:

every 24h
access link
if filename differs from the name of the existing file (e.g. previously downloaded)  OR there's no such a file 
download file
else skip

Я был бы рад простейшему решению. Может быть, учебник? Спасибо!

PS Я хочу, чтобы это было реализовано в приложении django, поэтому, пожалуйста, не предлагайте использовать cron

Ответы [ 3 ]

1 голос
/ 02 августа 2020

Вот решение моей проблемы - надеюсь, это поможет кому-то другому!

Во-первых - согласно do c (https://django-background-tasks.readthedocs.io/en/latest/) fi установлен django-background-tasks и добавлен в INSTALLED_APPS в settings.py. Затем была выполнена миграция базы данных.

Теперь основной шаг - в папке приложения, которую я создал tasks.py, когда я поместил свою функцию, продолжая ее с помощью декоратора (в моей задаче это было @background(schedule=10). Затем , вызов функции был установлен в urls.py! Это очень важно, поскольку вставка его в settings.py вызывает некоторые проблемы с PRIVATE_KEY.

Наконец, python manage.py process_tasks и python manage.py runserver и т.д. работа.

0 голосов
/ 01 августа 2020

Вы можете использовать Django package Celery для выполнения запланированных задач.

Следуйте документации и с помощью ' celery beat ' вы можете настроить период c задача.

Ваш сценарий будет следующим:

from celery.schedules import crontab

app.conf.beat_schedule = {
    # Executes every day at midnight
    'run-every-day': {
        'task': 'tasks.add',
        'schedule': crontab(minute=0, hour=0),
    },
}
0 голосов
/ 01 августа 2020

Можно использовать сельдерей. Но, если вы хотите что-то попроще, django -background-tasks - самый простой вариант. https://django-background-tasks.readthedocs.io/en/latest/.

Это так просто:

Добавление декоратора в вашу функцию

@background
def your_function(..) //all logic resides here

Функция вызова: этот код находится там, где вы необходимо запустить вызов функции (может быть, после создания какого-либо объекта? или в settings.py, если он должен запускаться без каких-либо условий.

your_function(....,repeat=TASK.DAILY, repeat_until=<datetime or None>) 
...