"crear una secuencia de comandos python e instalar esa secuencia de comandos como cron (con la configuración de la variable DJANGO _SETTINGS _MODULE antes de ejecutar la secuencia de comandos)?"
En primer lugar, asegúrese de declarar sus formularios en un módulo separado (por ejemplo forms.py
)
A continuación, puede escribir cargadores lotes que se ven así. (Tenemos una gran cantidad de estos.)
from myapp.forms import MyObjectLoadForm
from myapp.models import MyObject
import xml.etree.ElementTree as ET
def xmlToDict(element):
return dict(
field1= element.findtext('tag1'),
field2= element.findtext('tag2'),
)
def loadRow(aDict):
f= MyObjectLoadForm(aDict)
if f.is_valid():
f.save()
def parseAndLoad(someFile):
doc= ET.parse(someFile).getroot()
for tag in doc.getiterator("someTag")
loadRow(xmlToDict(tag))
Tenga en cuenta que hay muy poco procesamiento única aquí - sólo se utiliza la misma forma y el modelo como sus funciones de vista.
Ponemos estos scripts por lotes con nuestra aplicación Django, ya que depende de la aplicación models.py
y forms.py
.
La única parte "interesante" es transformar su fila XML en un diccionario para que funcione a la perfección con los formularios de Django. Aparte de eso, este programa de línea de comandos usa todos los mismos componentes de Django como su vista.
Es probable que desee agregar el análisis y el registro de opciones para hacer una aplicación de línea de comandos completa de esto. También notará que gran parte de la lógica es genérica: solo la función xmlToDict
es verdaderamente única. Llamamos a estos "Constructores" y tenemos una jerarquía de clases para que nuestros Constructores sean todas las asignaciones polimórficas de nuestros documentos de origen a los diccionarios de Python.
Puedo hacerlo desde ambos lados, guárdelo de la vista o guárdelo desde el script de python. – Marius
Un comando de administración personalizado es una mejor solución que cambiar la configuración del entorno de Django usted mismo. Ver la respuesta de Daevaorn. –