2 Fragen zu Django Best Practice
Verfasst: Montag 13. Mai 2024, 08:13
Einleitung:
Ich bin Python- und Django-Anfänger, habe aber schon einiges an Programmiererfahrung in anderen Sprachen. Auf Python bin ich gestossen, weil mein bisheriger Schwerpunkt Programmierung für den Desktop war, ich bisher erst ein grösserers Webprojekt hinter mir habe, das zwar erfolgreich mit PHP läuft, seinen Schwerpunkt aber eher nicht in der GUI hatte. Wollte dann mein nächstes Projekt ebenfalls mit PHP umsetzen, bin aber nie mit dem von mir gewählten Laravel warm geworden. So kam ich auf Python und Django und bin schwer begeistert. Mir geht es jetzt darum, dass ich bei folgenden Themen gerne eure Erfahrung anzapfen möchte, damit ich in die richtige Richtung laufe:
1. Ordnerstruktur
Mein aktuelles Projekt droht mittelgross zu werden, bin beim Design der Datenbanktabellen bei 58 Tabellen angelangt und es werden definitiv noch mehr. Das Projekt braucht eine solide Struktur - in der DB bin ich sattelfest, aber in Django noch nicht. Es werden mehrere Apps die ineinander verzahnt sind, jede App mit zig Models/Klassen/Views. Ist es egal, wie ich die Ordner strukturiere oder gibt es da best practices? Damit es übersichtlich bleibt würde ich zB gerne alle Klassen und Views in eigene Unterordner legen:
appname/views
appname/classes
Passt das so oder hat das Nachteile? Kann man das mit den Models auch so machen oder sollen die lieber in einem einzigen File models.py bleiben?
2. Standard-Django-Tabellen für User, Sessions, Berechtigungen etc
Ich verwende bei meinen Tabellen ein eigenes Benennungsschema, habe also in jedem Model im Meta ein db_table='xyz'. Ich würde das aus Gründen der Konsistenz auch gerne für alle Django-Standard-Tabellen wie auth_group etc machen. Ich habe mir den Abschnitt in der Doku schon durchgelesen (Customizing authentication in Django), kann mich mangels Erfahrung aber nicht entscheiden, ob es klüger ist, die Tabellen beim Originalnamen zu belassen und eine eigene Tabelle mit den Zusatzinfos zu machen (OneToOneField) oder doch gleich eine eigene Klasse und die in AUTH_USER_MODEL eintragen.
Was sind die langfristigen Vor- und Nachteile der beiden Herangehensweisen?
Ich arbeite derzeit noch direkt mit der Datenbank, also ohne eine einzige Migration durchgeführt zu haben (ausser in einem kleinen Testprojekt), bin also noch völlig frei in der Entscheidung. Die Apps sind übrigens absolut spezifisch, nicht wiederverwendbar und miteinander verzahnt.
Danke fürs lesen von soo viel Text!
Ich bin Python- und Django-Anfänger, habe aber schon einiges an Programmiererfahrung in anderen Sprachen. Auf Python bin ich gestossen, weil mein bisheriger Schwerpunkt Programmierung für den Desktop war, ich bisher erst ein grösserers Webprojekt hinter mir habe, das zwar erfolgreich mit PHP läuft, seinen Schwerpunkt aber eher nicht in der GUI hatte. Wollte dann mein nächstes Projekt ebenfalls mit PHP umsetzen, bin aber nie mit dem von mir gewählten Laravel warm geworden. So kam ich auf Python und Django und bin schwer begeistert. Mir geht es jetzt darum, dass ich bei folgenden Themen gerne eure Erfahrung anzapfen möchte, damit ich in die richtige Richtung laufe:
1. Ordnerstruktur
Mein aktuelles Projekt droht mittelgross zu werden, bin beim Design der Datenbanktabellen bei 58 Tabellen angelangt und es werden definitiv noch mehr. Das Projekt braucht eine solide Struktur - in der DB bin ich sattelfest, aber in Django noch nicht. Es werden mehrere Apps die ineinander verzahnt sind, jede App mit zig Models/Klassen/Views. Ist es egal, wie ich die Ordner strukturiere oder gibt es da best practices? Damit es übersichtlich bleibt würde ich zB gerne alle Klassen und Views in eigene Unterordner legen:
appname/views
appname/classes
Passt das so oder hat das Nachteile? Kann man das mit den Models auch so machen oder sollen die lieber in einem einzigen File models.py bleiben?
2. Standard-Django-Tabellen für User, Sessions, Berechtigungen etc
Ich verwende bei meinen Tabellen ein eigenes Benennungsschema, habe also in jedem Model im Meta ein db_table='xyz'. Ich würde das aus Gründen der Konsistenz auch gerne für alle Django-Standard-Tabellen wie auth_group etc machen. Ich habe mir den Abschnitt in der Doku schon durchgelesen (Customizing authentication in Django), kann mich mangels Erfahrung aber nicht entscheiden, ob es klüger ist, die Tabellen beim Originalnamen zu belassen und eine eigene Tabelle mit den Zusatzinfos zu machen (OneToOneField) oder doch gleich eine eigene Klasse und die in AUTH_USER_MODEL eintragen.
Was sind die langfristigen Vor- und Nachteile der beiden Herangehensweisen?
Ich arbeite derzeit noch direkt mit der Datenbank, also ohne eine einzige Migration durchgeführt zu haben (ausser in einem kleinen Testprojekt), bin also noch völlig frei in der Entscheidung. Die Apps sind übrigens absolut spezifisch, nicht wiederverwendbar und miteinander verzahnt.
Danke fürs lesen von soo viel Text!