2009-08-17 3 views
22

Ich arbeite gerade meinen Weg durch Django, und ich mag es wirklich bis jetzt, aber ich habe ein Problem und ich bin mir nicht sicher, was der typische Weg, es zu lösen.Django MVC-Muster für nicht datenbankgesteuerte Modelle?

Angenommen, ich habe eine View, die aktualisiert werden soll, wenn ein komplexes Python-Objekt aktualisiert wird, aber dieses Objekt wird nicht von der Datenbank gesteuert, sagen wir, es wird durch AJAX-Aufrufe oder direkt vom Benutzer oder etwas gesteuert.

Wohin geht dieser Code? Sollte es noch in models.py gehen ??

Antwort

36

Ihre models.py kann (und ist manchmal) leer sein. Sie sind nicht verpflichtet, ein Modell zu haben, das einer Datenbank zugeordnet ist.

Sie sollten noch eine models.py Datei haben, um Djangos Admin glücklich zu machen. Der Dateiname models.py ist wichtig, und es ist einfacher, eine leere Datei zu haben, als zu versuchen, die von verschiedenen Admin-Befehlen erwartete Datei zu ändern.

Das "Modell" - im Allgemeinen - muss nicht auf eine Datenbank abgebildet werden. Das "Modell" - als eine allgemeine Komponente des MVC-Designs - kann alles sein.

Sie können - und tun es oft auch - Ihr eigenes "Modell" -Modul definieren, das Ihre Ansichten verwenden. Nennen Sie es einfach nicht models.py, weil es Django Admin verwechseln wird. Nennen Sie es für Ihre Anwendung etwas Sinnvolles: foo.py. Diese foo.py manipuliert die realen Dinge, die Ihre Anwendung untermauern - nicht unbedingt eine Django Model.model Unterklasse.

Django MVC erfordert keine Datenbankzuordnung. Es wird ausdrücklich erwartet, dass das Modul models.py eine Datenbankzuordnung enthält. Verwenden Sie also eine leere models.py, wenn Sie keine tatsächliche Datenbankzuordnung haben.

Ihre views.py verwenden können

import foo 

def index(request): 
    objects = foo.somelistofobjects() 
    *etc.* 

Django können Sie ganz einfach ohne Datenbank-Mapping arbeiten. Ihr Modell kann leicht alles sein. Nennen Sie es nicht models.py.


bearbeiten.

Sind Ansichten bei Models registriert?

Bei Aktualisierung des Modells durch den Controller werden die Ansichten benachrichtigt?

Ist das Modell genau die Datenrepräsentation, da dies wirklich MVP ist? Ja.

Lesen Sie die Django-Dokumentation. Es ist einfach.

Web-Anfrage -> URL-Mapping -> Funktion anzeigen -> Vorlage -> Antwort.

Das Modell kann von der View-Funktion verwendet werden. Das Modell kann eine Datenbankzuordnung sein oder jede andere Sache.

+0

Ihre Antwort kann stimmen oder nicht, ich habe Django nicht benutzt, und es ist 2 Jahre her, seit ich Python benutzt habe. Aber das ist es, was ich absolut hasse, was Web-Frameworks mit dem Konzept von MVC getan haben.Es gibt keine unbedingte Anforderung, dass die Modelldaten im MVC-Paradigma aus der Datenbank stammen. –

+0

Das Modell muss * nicht * aus einer Datenbank stammen. Wir machen es in unseren Django-Anwendungen. Einige unserer Apps haben Modelle, die nicht in der Datenbank enthalten sind. –

+3

Fair genug, aber anscheinend müssen Sie in einer Weise arbeiten, die in Django nicht Standard ist, um dies zu tun. Und natürlich habe ich das auch mit anderen Frameworks gesehen. Ich denke, dass sie alle den Web-Entwicklern, die sich mit der Erfahrung von Impressionen und weniger Erfahrung auskennen, den Dienst weggenommen haben, indem sie den Begriff "Modellklassen" eingeführt haben. Meistens handelt es sich um * Entity * -Klassen. Ich stimme gar nicht zu, dass es so etwas wie eine Modellklasse geben sollte, das Modell befindet sich auf einer noch höheren Abstraktionsebene. Eine Modellfassade vielleicht, aber Modellklassen, nein. Wie auch immer, es ist mein Liebling und ich denke ich bin ein MVC Purist oder so. –