Plus simple à écrire un programme Python avec accès à la fonctionnalité de base de données Django

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

Question

J'ai un site Web qui va chercher l'information de flux RSS périodiquement (bien, actuellement manuellement, ce qui est mon problème). Ceci est actuellement mis en œuvre en vue Django normale, ce qui est très agréable à mon avis. Je voudrais avoir un programme Python qui est exécuté en utilisant une tâche cron au lieu de visiter manuellement l'URL correcte pour mettre à jour les informations.

Quelle est la meilleure façon de faire un programme Python ont accès à mon application particulière Django et Django ORM?

Était-ce utile?

La solution

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)

Ce fut ainsi que je l'ai fait pour une Cron que les parties mises à jour quotidiennes envoyé par courriel. Le .py vivait à la racine de mon application django, de sorte que les paramètres d'importation refléterait que, par conséquent.

Autres conseils

Une alternative à toutes les approches données ici est d'écrire votre tâche cron comme une commande ./manage.py personnalisée. Ceci est très facile à faire, et vous donne la possibilité de faire ./manage.py yourcommand soit sur la ligne de commande ou dans votre crontab.

La documentation sur ce qui est très rare, mais il ne vous dit de regarder le code pour les commandes existantes, que vous pouvez utiliser comme modèle pour votre propre.

Modifier : Pour Django 1.7

import os
import django

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
django.setup()
#have fun

de crédit


réponse choisie est dépréciée depuis Django 1.4

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project_name.settings")
#from your_app_name import models
##have fun

Source: https://stackoverflow.com/a/18760222

Vous voulez quelque chose comme ça dans votre crontab:

PYTHONPATH=/path/to/your/project DJANGO_SETTINGS_MODULE=settings myscript.py

Et puis votre script python devrait commencer par ceci:

#!/usr/bin/env python

from django.conf import settings

A partir de là, vous devriez être en mesure d'importer vos modèles / vues / formes / tout le monde, et ont un environnement à peu près comme un ./manage.py shell

Remarque: Selon la façon dont vous faites vos importations dans votre projet, cela peut ne pas exactement comme indiqué. Si vous êtes toujours en train de faire quelque chose comme « de myproject.myapp.models import * », alors vous voulez mettre en ligne cron pour ressembler à ceci:

PYTHONPATH=/path/to/1_level_before_your_project DJANGO_SETTINGS_MODULE=myproject.settings myscript.py
  

Je voudrais avoir un programme Python   qui est exécuté à l'aide d'un cronjob place   de visiter manuellement l'URL correcte   de mettre à jour les informations.

Une alternative simpliste: écrire une tâche cron pour automatiquement « visiter l'URL correcte pour mettre à jour les informations » - pourrait être aussi simple que d'un curl ou wget, après tout. Cela ne répond pas à la question dans le titre, mais étant donné la façon dont vous expliquer votre vrai problème sous-jacent, il pourrait bien être l'approche la plus simple et le plus immédiat pour le résoudre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top