Was ist die beste Idee, um Daten aus einer externen Quelle in ein Django-Modell zu füllen?
z. Ich habe ein Modell ausgeführt, und führt Daten in einer XML-Datei, die wöchentlich wechselt.
Soll ich eine Ansicht erstellen und diese Ansichts-URL von einem Curl-Cronjob aufrufen (mit dem Vorteil, dass diese Daten jederzeit gelesen werden können, nicht nur wenn der Cronjob ausgeführt wird) oder ein Python-Skript erstellen und dieses Skript als Cron installieren ( mit DJANGO _SETTINGS _MODULE Variable Setup vor dem Ausführen des Skripts)?
Es gibt eine ausgezeichnete Möglichkeit, einige wartungsähnliche Jobs in der Projektumgebung zu erstellen - schreiben Sie ein Alex Koshelev 07.02.2009, 18:43
Sie müssen keine Ansicht erstellen, Sie sollten einfach ein Python-Skript mit dem entsprechenden Django-Umgebungseinstellungen konfiguriert . Rufen Sie dann Ihre Modelle direkt so auf, wie Sie es tun würden, wenn Sie eine Ansicht verwenden würden, verarbeiten Sie Ihre Daten, fügen Sie sie Ihrem Modell hinzu und speichern Sie dann das Modell in der Datenbank.
Ich habe Cron verwendet, um meine Datenbank mit einem Skript und einer Ansicht zu aktualisieren. Aus der Sicht von Cron spielt es keine Rolle, welchen man wählt. Wie Sie jedoch bemerkt haben, ist es schwer, die Einfachheit des Startens eines Browsers und das Treffen einer URL zu übertreffen, wenn Sie jemals in einem nicht geplanten Intervall aktualisieren möchten.
Wenn Sie die Ansichtsroute verwenden, kann es sinnvoll sein, eine Ansicht in Betracht zu ziehen, die die XML-Datei selbst über einen HTTP-POST akzeptiert. Wenn dies für Ihre Daten sinnvoll ist (Sie geben nicht viele Informationen über diese XML-Datei), würde es immer noch von Cron funktionieren, könnte aber auch einen Upload von einem Browser akzeptieren - möglicherweise die Person, die die XML-Datei erstellt, aktualisieren DB von selbst. Das ist ein großer Gewinn, wenn Sie nicht derjenige sind, der die XML-Datei erstellt, was in meiner Erfahrung normalerweise der Fall ist.
"Erstellen Sie ein Python-Skript und installieren Sie dieses Skript als Cron (mit DJANGO _SETTINGS _MODULE Variablen Setup, bevor Sie das Skript ausführen)?"
Stellen Sie zuerst sicher, dass Sie Ihre Formulare in einem separaten Modul deklarieren (z. B. forms.py
)
Dann können Sie Chargenlader schreiben, die so aussehen. (Wir haben eine Menge davon.)
%Vor%Beachten Sie, dass es hier nur sehr wenig eindeutige Verarbeitung gibt - es verwendet nur das gleiche Formular und Modell wie Ihre Ansichtsfunktionen.
Wir fügen diese Batch-Skripte in unsere Django-Anwendung ein, da dies von den models.py
und forms.py
der Anwendung abhängt.
Der einzige "interessante" Teil besteht darin, Ihre XML-Zeile in ein Wörterbuch umzuwandeln, damit sie nahtlos mit den Formen von Django zusammenarbeitet. Abgesehen davon verwendet dieses Befehlszeilenprogramm dieselben Django-Komponenten wie Ihre Ansicht.
Wahrscheinlich möchten Sie Optionen zum Parsen und Loggen hinzufügen, um daraus eine vollständige Befehlszeilen-App zu machen. Sie werden auch bemerken, dass ein Großteil der Logik generisch ist - nur die Funktion xmlToDict
ist wirklich einzigartig. Wir nennen diese "Builders" und haben eine Klassenhierarchie, so dass unsere Builder alle polymorphen Zuordnungen von unseren Quelldokumenten zu Python-Wörterbüchern sind.
Tags und Links python django django-models