Django – Dynamische Modelle

In Django sind die Klassen Python- Objekte . Wie jedes andere Objekt können wir zum Zeitpunkt der Programmausführung viele interessante Effekte erzielen. Dank der Tatsache, dass wir alle in Django verfügbaren Python-Funktionen und -Methoden haben , können wir Klassen erstellen, die dynamische Klassen erzeugen können.

Das Erstellen einer dynamischen Klasse kann einige Vorteile mit sich bringen, z. B. das Erstellen eines Modells aus einer Klasse, wodurch neue Funktionen generiert werden.

Wie funktionieren Klassen im Framework?

Um dynamische Modelle zu generieren, müssen Sie zunächst sicherstellen, dass Sie verstehen, wie Klassen in Python funktionieren.

Wir wissen, dass Python- Klassen Objekte sind, die zur Laufzeit mithilfe des internen type () -Konstruktors erstellt werden können und die Details darüber erhalten, wie sie definiert werden sollen.

Models in Django

Da wir wissen, wie Klassen in Python funktionieren, müssen wir betonen, dass die Modelle in Django Standardklassen von Python sind, nur dass sie so deklariert sind, wie sie von Django verwendet werden können und dass sie Standardklassen sind, sodass wir Modelle zur Laufzeit generieren können.

Erste Implementierung

Sehen wir uns das folgende Bild mit einem kleinen Code an:

django_modelodinamico.jpg

Hier sehen wir, wie das Django-Framework das Modellmodul importiert. Anschließend haben wir eine Methode erstellt, um die Modelle mit dem Konstruktor type () zu erstellen, den wir im vorherigen Punkt des Lernprogramms erwähnt haben.

Obwohl dieser vereinfachte Ansatz, den wir angewendet haben, offensichtlich nicht funktioniert, besteht das Problem darin, dass Django erwartet, dass ein Wörterbuch ein Modul mit seinem Code enthält.
Sehen wir uns jetzt einen Code an, mit dem wir dieses Problem lösen:

 def create_model (name, module_path): Rückgabetyp (name, (models.Model,), {'__module__': module_path}) 

Mit dieser Implementierung haben wir den ersten Fehler im ersten Beispiel behoben.

See also  So schützen Sie SSH mit fail2ban in CentOS

Konfigurationsoptionen hinzufügen

Wir werden unseren dynamischen Modellgenerierungscode vervollständigen, einschließlich der Möglichkeit, die Konfigurationsoptionen von Django einzubeziehen . Dazu werden wir die Meta-Klasse verwenden und ihre Operation überschreiben, damit unsere neue Implementierung es uns ermöglicht, die Art und Weise, wie wir vorgehen, neu zu definieren Um die Optionen zu verwalten, sehen wir uns in der folgenden Abbildung den Code an, der bereits ausgeführt wurde, um dies zu erreichen:

django_modelodinamico2.jpg

In diesem Code haben wir einige Aspekte unseres ursprünglichen Codes deutlich geändert. Zunächst haben wir festgelegt, dass der Pfad des Moduls wie folgt lautet: Django.db.models . Von hier aus werden wir die ursprünglichen Definitionen zeichnen. Sobald dies geschieht, erstellen wir ein Wörterbuch, in dem wir es zuweisen a __module__ der Wert des Pfads, den wir definiert haben.

Dann überarbeiten wir die Meta-Klasse. Damit haben wir die möglichen Probleme gespeichert, die wir zu Beginn dieses Punktes angesprochen hatten. Schließlich können wir unsere Methode type () aufrufen und die erforderlichen Daten übergeben, ohne Fehler zu verursachen.

Mit diesem neuen Wissen, das wir generiert haben, verfügen wir bereits über eine solide Basis, mit der wir sicherer mit dem Django- Code interagieren können, was uns in eine vorteilhafte Position für die Entwicklung unserer Anwendungen und die Generierung von Formmodellen versetzt. dynamisch in der Ausführungszeit unseres Programms.

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *