Wie sollen mehrere Django-Apps miteinander kommunizieren?

9

Andere Poster haben bereits in diesem Forum gesagt, dass wenn deine Django-App anfängt, groß und unübersichtlich zu werden, du sie in mehrere Apps aufteilen solltest. Ich bin jetzt an diesem Punkt. Was sind die besten Praktiken, um die Kommunikation zwischen diesen Apps zu ermöglichen?

Eine meiner Anwendungen (nennen wir sie Prozessor) verarbeitet sehr große Datenmengen. Einmal pro Stunde produziert es eine kleine Menge neuer Daten für die andere App. Diese andere App (nennen wir sie Presenter) zeigt die Daten den Benutzern an.

Wie sollte der Prozessor neue Daten an Presenter übergeben? Sollten Teile des Modells von Presenter einfach importiert werden, um Datensätze in der Presenter-Datenbank zu erstellen und zu speichern? Das scheint eine enge Verbindung zu mir zu sein. Oder sollte es die Daten übergeben, indem eine Funktion in Presenter aufgerufen wird? Oder legen Sie die Daten in eine Art Datenspeicher, von dem sowohl der Prozessor als auch der Moderator wissen?

Wie lösen Sie normalerweise dieses Problem?

/ Martin

    
Martin Omander 22.09.2010, 16:41
quelle

1 Antwort

4

Ich würde definitiv für die Modelle des importierenden Prozessors in der Presenter App gehen. So können Sie beispielsweise zusätzliche Benutzerinformationen hinzufügen: Sie haben ein UserPreferences -Modell mit einem ForeignKeyField bis django.contrib.auth.models.User . Sie haben vielleicht weniger das schlechte Gefühl, das zwischen Ihren beiden Apps zu tun, denn django.contrib ist die "Standardbibliothek", aber nichtsdestoweniger ist es eine direkte Kopplung.

Wenn Ihre Anwendungen gekoppelt sind, sollte Ihr Code entsprechend gekoppelt sein. Dies folgt der Idee, dass explizit ist besser als implizit, oder?

Wenn Sie jedoch etwas generischer gestalten (d. h., Sie verwenden mehrere Presenter-App-Instanzen für verschiedene Prozessoren), können Sie die spezifischen Modelle als Einstellung speichern:

%Vor%

Dann in Ihren Presenter-Modellen:

%Vor%

Vorbehalt: Ich habe das nie versucht, aber ich kann mich nicht erinnern, dass eine Einschränkung der Einstellungen nur Strings, Tupel oder Listen sein könnte!

    
André Caron 22.09.2010, 16:53
quelle

Tags und Links