Manera más fácil de escribir un programa en Python con el acceso a la funcionalidad de base de datos de Django

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

Pregunta

Tengo un sitio web que recopila información de fuentes RSS periódicamente (bueno, actualmente de forma manual, y este es mi problema).Actualmente, esto está implementado como una normal Django punto de vista, que no es muy agradable, en mi opinión.Me gustaría tener un programa en Python que se ejecuta mediante una tarea programada en lugar de manualmente visitando la URL correcta para la actualización de la información.

¿Cuál es la forma más sencilla de hacer un programa en Python tienen acceso a mi en particular aplicación Django y el ORM de Django?

¿Fue útil?

Solución

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)

Esta era la forma en que lo hice por un cron que envió por correo electrónico partes actualizaciones diarias. El .py vivió en la raíz de mi aplicación Django, por lo que los ajustes de importación reflejaría que en consecuencia.

Otros consejos

Una alternativa a todos los enfoques que se dan aquí es escribir su tarea en el cron como un comando ./manage.py personalizado. Esto es muy fácil de hacer, y le da la capacidad de hacer ./manage.py yourcommand ya sea en la línea de comandos o en su crontab.

El documentación sobre este tema es muy escasa, pero que Qué le dice a mirar el código para los comandos existentes, que se pueden utilizar como una plantilla para su propia cuenta.

Editar:Para Django 1.7

import os
import django

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

De crédito


Respuesta seleccionada es obsoleto desde Django 1.4

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

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

¿Quieres algo como esto en su crontab:

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

Y a continuación, la secuencia de comandos de Python debe comenzar con esto:

#!/usr/bin/env python

from django.conf import settings

A partir de ahí, usted debe ser capaz de importar los modelos / views / formas / cualquier otra cosa, y tienen un ambiente más o menos igual que un ./manage.py shell

Nota: Dependiendo de cómo lo hace sus importaciones dentro de su proyecto, esto puede no funcionar exactamente como se muestra. Si siempre está haciendo algo así como "de myproject.myapp.models import *", entonces usted tendrá que ajustar la línea de cron para parecerse más a esto:

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

Me gustaría tener un programa Python   que se ejecute utilizando una tarea programada en vez   de visitar manualmente la dirección URL correcta   para actualizar la información.

Una alternativa simple: escribir una tarea programada a automáticamente "visitar la URL correcta para actualizar la información" - podría ser tan simple como un curl o wget, después de todo. Esto no responde a la pregunta del título, pero dada la forma en que explica su problema real subyacente que sólo podría ser el enfoque más simple y más inmediata para resolverlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top