Самый простой способ написать программу на Python с доступом к функциональности базы данных Django

StackOverflow https://stackoverflow.com/questions/1381346

Вопрос

У меня есть веб-сайт, который периодически извлекает информацию из 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, в конце концов.Это не отвечает на вопрос в названии, но, учитывая то, как вы объясняете свою реальную основную проблему, это может быть самым простым и непосредственным подходом к ее решению.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top