Python Django, Aufteilung in Apps und Models

Drahminedum

Lieutenant
Registriert
Sep. 2016
Beiträge
685
Hatte lange am/für den Desktop entwickelt, in den letzten Jahren habe ich aber immer wieder kleinere bis mittlere Projekte in PHP fürs Web entwickelt.

Aktuell suchte ich für ein neues Webprojekt, das Potential hat grösser zu werden, eine Kombi aus Sprache+Lib. Anforderungen: guter Datenbankzugriff nicht nur für Mysql/Postgres sondern potentiell ev. auch für Sqlserver, Templateengine, möglichst rasche Entwicklung. Mein Favorit war eigentlich Laravel, weil ich PHP schon kann, aber trotz mehrerer Anläufe wurde ich damit nicht warm, ausserdem hat mir an einigen Stellen Laravel etwas aufgezwungen, was ich so nicht brauchen konnte. Weitergesucht und Python/Django ausprobiert und was soll ich sagen... I'm in love! Nicht nur, dass ich nach drei Tagen Entwicklung schon um Grössenordnungen weiter bin als in Laravel, Django ist komfortabler und es zwingt mir nicht stur einen bestimmten Weg auf.

Jetzt meine zwei Fragen an die Profis, gern auch Links auf passende Dokus:

1) Mein Projekt wird im Endausbau aus relativ vielen Teil-Apps bestehen. Sie hängen alle irgendwie voneinander ab, zB durch einen Pool an gemeinsamen Stammdaten. Kann ich davon ausgehen dass es mit Django Sinn macht, die Django-Apps auch ähnlich dieser Logik zu strukturieren? Oder gibt es da zusätzliche Überlegungen? Wie grenzt man die Dinge sinnvoll ab?

2) Mein Datenbankmodell wird eher umfangreich, momentan sind es nur um die 20 Tabellen, aus Erfahrung mit ähnlichen Projekten weiss ich aber, dass es eher gegen 100 Tabellen werden. Wie ist die beste Vorgangsweise? Ein einziges models.py macht da wenig Sinn, also wäre meine spontane Idee gewesen die Modelle analog zu den Apps zu organisieren, also zB ein eigenes models.py für die Stammdaten etc. Oder irgendwie eine zentrale App nur für die Models?

Danke schon mal im Voraus für Input.
 
1) Das kannste eigentlich machen, wie Du willst. Ich würde, was für sich alleine nützlich ist und ggf. woanders wiederverwendet werden könnte, in eine eigene App tun.

2) Modelle müssen im Modul models sein, was Dich aber nicht daran hindert, Deine Modelle auf mehrere Dateien zu verteilen. Erstelle ein Verzeichnis models und verschiebe models.py nach models/__init__.py. Das ist aus Modul-Perspektive identisch. Du kannst weitere Python-Dateien unter models (oder auch ganz woanders) erstellen und die Modelle dann in __init__.py importieren, wodurch sie im Modul models sind.
Ergänzung ()

Wenn Du Modelle in models/person.py und models/whatever.py hast, könnte models/__init__.py ungefähr so aussehen:
Python:
from .person import Person, PersonGroup
from .whatever import Whatever, WhateverRelated
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Drahminedum
Drahminedum schrieb:
Django ist komfortabler und es zwingt mir nicht stur einen bestimmten Weg auf.
Hm würde ich so nicht sagen. Weiß nicht ob es den Slogan noch gibt, aber er hieß mal: There is only one way - the Django way. Und diese Philosophie fand ich irgendwann ziemlich nervig.

Wenn du Adminbereich, Templates und überwiegend DB Zugriffe hast, ist Django schon fein. Wenn du aber Frontend und Backend mehr getrennt haben möchtest, neben DB auch viele verschiedene Dateioperationen hast, oder hauptsächlich eine API brauchst, ist Django eher im Weg.

Das Handling mit dem "Django REST framework", eigene Filter, oder Views schreiben die abseits vom Standard sind macht kein Spaß und nach längerem wieder mal Hand anlegen finde ich auch nicht so dolle (neben Python-Kenntnis muss man halt auch Django können).

Vielleicht jetzt nicht passend für dich, aber wenn man z.B. fastAPI mit Django vergleicht, ist das viel schlanker und steht weniger im Weg. Man ist hier viel freier in der Gestaltung seines Codes.
 
Zurück
Oben