"создать сценарий python и установить этот сценарий как cron (с настройкой переменной DJANGO _SETTINGS _MODULE перед выполнением сценария)?"
Сначала обязательно объявите свои формы в отдельном модуле (например, forms.py
)
Затем вы можете написать пакетный загрузчик, который выглядит следующим образом. (У нас их много.)
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) )
Обратите внимание, что здесь очень мало уникальной обработки - она просто использует ту же форму и модель, что и функции вашего представления.
Мы добавили эти пакетные сценарии в наше приложение Django, поскольку оно зависит от models.py
и forms.py
.
приложения.
Единственная «интересная» часть - это преобразование строки XML в словарь, чтобы она без проблем работала с формами Django. Кроме этого, эта программа командной строки использует все те же компоненты Django, что и ваш вид.
Возможно, вы захотите добавить параметры разбора и ведения журнала, чтобы сделать из этого полноценное приложение командной строки. Вы также заметите, что большая часть логики является общей - только функция xmlToDict
действительно уникальна. Мы называем их «Builders» и имеем иерархию классов, так что все наши Builders являются полиморфными отображениями из наших исходных документов в словари Python.