Самый простой способ написать программу на Python с доступом к функциональности базы данных Django
-
21-09-2019 - |
Вопрос
У меня есть веб-сайт, который периодически извлекает информацию из RSS-каналов (ну, в настоящее время вручную, и это моя проблема).В настоящее время это реализовано как обычный вид Django, что, на мой взгляд, не очень приятно.Я хотел бы иметь программу на Python, которая запускается с использованием cronjob вместо того, чтобы вручную посещать правильный URL-адрес для обновления информации.
Какой самый простой способ заставить программу Python иметь доступ к моему конкретному приложению Django и Django ORM?
Решение
from django.core.management import setup_environ
from django.core.mail import EmailMultiAlternatives, send_mail
from django.contrib.auth.models import User
import settings
from my.app.models import *
setup_environ(settings)
Вот как я сделал это для cron, который отправлял сторонам ежедневные обновления по электронной почте.Файл .py находился в корневом каталоге моего приложения django, поэтому настройки импорта будут отражать это соответствующим образом.
Другие советы
Альтернативой всем приведенным здесь подходам является написание вашего задания cron как пользовательского ./manage.py
команда.Это очень легко сделать, и это дает вам возможность делать ./manage.py yourcommand
либо в командной строке, либо в вашей crontab.
Документация on this очень скуден, но он подсказывает вам посмотреть на код существующих команд, который вы можете использовать в качестве шаблона для своих собственных.
Редактировать:Для Django 1.7
import os
import django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
django.setup()
#have fun
Выбранный ответ - это устаревший начиная с Django 1.4
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
#from your_app_name import models
##have fun
Источник: https://stackoverflow.com/a/18760222
Вы хотите что-то подобное в своем crontab:
PYTHONPATH=/path/to/your/project DJANGO_SETTINGS_MODULE=settings myscript.py
И тогда ваш скрипт на python должен начинаться с этого:
#!/usr/bin/env python
from django.conf import settings
Оттуда вы должны иметь возможность импортировать свои модели / представления / формы / что угодно еще, и иметь среду, во многом похожую на ./manage.py shell
Примечание:В зависимости от того, как вы выполняете импорт внутри своего проекта, это может работать не совсем так, как показано.Если вы всегда делаете что-то вроде "from myproject.myapp.models import *", то вам захочется настроить строку cron так, чтобы она выглядела примерно так:
PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py
Я хотел бы иметь программу на Python которая запускается с использованием cronjob вместо ручного посещения правильного URL для обновления информации.
Упрощенная альтернатива:напишите cronjob для автоматически "перейдите по правильному URL-адресу, чтобы обновить информацию" - может быть таким же простым, как curl
или wget
, в конце концов.Это не отвечает на вопрос в названии, но, учитывая то, как вы объясняете свою реальную основную проблему, это может быть самым простым и непосредственным подходом к ее решению.