Django и cron

22.5.12
... или как запустить функцию из views.py через консоль.

Понадобилось мне по расписанию запускать функцию из views.py (читай через консоль). Наткнулся на пару заметок (раз, два). В комментариях к первой заметке и в апдейте второй сказали, что появилась возможность в джанге делать подобное практически из коробки - можно создать команду для manage.py.
Сразу даю ссылку на оф. документация по созданию подобных команд.
И приведу пример попроще - именно когда требуется запустить только функцию из views.py

Необходимо создать папки (management/commands) внутри приложения и скопировать в них по файлу __init__.py, как указано в примере документации:
polls/
    __init__.py
    models.py
    management/
        __init__.py
        commands/
            __init__.py
            _private.py
            closepoll.py
    tests.py
    views.py
Далее создаем в папке "commands" файл "run_function.py"
В нем пишем:
from django.core.management.base import BaseCommand
from Project.app.views import func  # импорт функции из views.py


class Command(BaseCommand):
    def handle(self, *args, **options):
        func()  # вызов функции
Теперь через консоль можно выполнять:
python manage.py run_function
В кроне возможно понадобится запускать с полными путями, что python, что manage.py

PS. Вполне возможно, что это в корне неправильный подход - буду рад советам.

0 комментариев:

Отправить комментарий