Ich habe ein ziemlich komplexes "Produkt", das ich mit Django bauen möchte. Ich werde es vermeiden, die Begriffe "Projekt" und "Anwendung" in diesem Zusammenhang zu verwenden, da mir ihre spezifische Bedeutung in Django nicht klar ist.
Projekte können viele Apps haben. Apps können von vielen Projekten gemeinsam genutzt werden. Fein.
Ich erfinde das Blog oder Forum nicht neu - ich sehe keinen Teil meines Produkts in irgendeinem Kontext wiederverwendbar. Intuitiv würde ich diese eine "Anwendung" nennen. Mache ich dann meine ganze Arbeit in einem einzigen "App" -Ordner?
Wenn ja ... in Bezug auf Djangos project.app
Namespace ist meine Neigung zu verwenden myproduct.myproduct
, aber das ist natürlich nicht erlaubt (aber die Anwendung, die ich erstelle, ist mein Projekt und mein Projekt ist eine Anwendung!). Ich glaube daher, dass ich mich vielleicht an Django wenden soll, indem ich eine App pro "signifikantem" Modell erstelle, aber ich weiß nicht, wo ich die Grenzen in meinem Schema ziehen soll, um es in Apps zu unterteilen - ich habe viel von Modellen mit relativ komplexen Beziehungen.
Ich hoffe, es gibt eine gemeinsame Lösung dafür ...
Antworten:
Was soll Sie davon abhalten, etwas zu benutzen
myproduct.myproduct
? Was Sie dazu ungefähr benötigen, besteht darin, Folgendes zu tun:und so weiter. Würde es helfen, wenn ich sagte,
views.py
dass nicht angerufen werden mussviews.py
? Vorausgesetzt, Sie können im Python-Pfad eine Funktion benennen (normalerweise package.package.views.function_name), die behandelt wird. So einfach ist das. All dieses "Projekt" / "App" Zeug ist nur Python-Pakete.Wie solltest du das machen? Oder besser gesagt, wie könnte ich das machen? Nun, wenn Sie ein erhebliches Stück wiederverwendbarer Funktionalität schaffen, sagen wie ein Markup - Editor, das ist , wenn Sie einen „Top - Level - App“ erstellen , welche enthalten könnte
widgets.py
,fields.py
,context_processors.py
etc - alles Dinge , die Sie importieren wollen könnten.Wenn Sie so etwas wie ein Blog in einem Format erstellen können, das für alle Installationen recht allgemein ist, können Sie es in einer App mit einer eigenen Vorlage, einem statischen Inhaltsordner usw. zusammenfassen und eine Instanz eines Django-Projekts konfigurieren, um dies zu verwenden Inhalt der App.
Es gibt keine festen Regeln, die besagen, dass Sie dies tun müssen, aber es ist eines der Ziele des Frameworks. Die Tatsache, dass alles, einschließlich Vorlagen, es Ihnen ermöglicht, von einer gemeinsamen Basis aus zu integrieren, bedeutet, dass Ihr Blog genau in jedes andere Setup passen sollte, indem Sie sich einfach um seinen eigenen Teil kümmern.
Um jedoch auf Ihr eigentliches Problem einzugehen, gibt es keinen Hinweis darauf, dass Sie nicht mit dem Projektordner der obersten Ebene arbeiten können. Genau das tun Apps, und Sie können es tun, wenn Sie es wirklich wollen. Ich neige jedoch aus mehreren Gründen dazu:
website
. Zu einem späteren Zeitpunkt möchte ich jedoch möglicherweise die ursprüngliche Funktionalität nur für diese Site entwickeln. Um es entfernbar zu machen (unabhängig davon, ob ich es jemals tue oder nicht), neige ich dazu, ein separates Verzeichnis zu erstellen. Dies bedeutet auch, dass ich diese Funktionalität löschen kann, indem ich die Verknüpfung dieses Pakets aus der Konfiguration aufhebe und den Ordner entferne, anstatt die richtigen URLs aus einem globalen Ordner urls.py zu löschen.Kurz gesagt, der Grund, warum es eine Konvention gibt, ist der gleiche wie bei jeder anderen Konvention - es hilft, wenn andere mit Ihrem Projekt arbeiten. Wenn ich sehe,
fields.py
erwarte ich sofort, dass der darin enthaltene Code das Feld von Django unterordnet, während ich, wenn ich sehe,inputtypes.py
möglicherweise nicht so klar bin, was das bedeutet, ohne es anzusehen .quelle
manage.py
verursacht und dazu führt, dass Ihre Projekteinstellungen nicht korrekt importiert werden können. Dies ist mir passiert und ich habe es gelöst, indem ich die App entsprechend umgestaltet habemyproduct_app
.Sobald Sie die Verwendung von
startproject
und abgeschlossen habenstartapp
, hindert Sie nichts daran, ein "Projekt" und eine "App" in demselben Python-Paket zu kombinieren. Ein Projekt ist wirklich nichts anderes als einsettings
Modul, und eine App ist wirklich nichts anderes als einmodels
Modul - alles andere ist optional.Für kleine Websites ist es völlig vernünftig, etwas zu haben wie:
quelle
INSTALLED_APPS
Liste aufnehmen. Hier ist ein Beispiel: stackoverflow.com/a/59739912/399435Ich habe diesen Gedanken irgendwo gelesen, kurz nachdem ich angefangen habe, mit Django zu arbeiten, und ich stelle fest, dass ich mir diese Frage ziemlich oft stelle und sie mir hilft.
Ihre Apps müssen nicht wiederverwendbar sein, sie können voneinander abhängen, aber sie sollten eines tun.
quelle
Ich fand die folgenden Blog-Beiträge sehr nützlich über Django-Anwendungen und -Projekte:
Grundsätzlich haben Sie mit django viel Freiheit bei der Organisation des Quellcodes Ihres Produkts.
quelle
Es gibt nichts wie nicht erlaubt. Es ist dein Projekt, niemand schränkt dich ein. Es ist ratsam, einen vernünftigen Namen zu behalten.
In einem allgemeinen Django-Projekt gibt es viele Apps (Contrib-Apps), die wirklich in jedem Projekt verwendet werden.
Nehmen wir an, Ihr Projekt erledigt nur eine Aufgabe und hat nur eine einzige App (ich nenne es
main
nenne da sich das Projekt darum dreht und kaum steckbar ist). Auch dieses Projekt verwendet im Allgemeinen noch einige andere Apps.Wenn Sie nun sagen, dass Ihr Projekt nur die eine App (
INSTALLED_APPS='myproduct'
) verwendet, was also zurproject
Definition des Projekts verwendet wirdproject.app
, sollten Sie einige Punkte berücksichtigen:Was die meisten Arbeiten in der App betrifft, denke ich, dass dies bei den meisten Django-Projekten der Fall ist.
quelle
main
Convention - das macht für mich für ein originelles Projekt wie dieses sehr viel Sinn. Ich habe vor, später "wiederverwendbare" Apps hinzuzufügen, aber das liegt momentan weit außerhalb meines Fokus.Hier weisen Django-Schöpfer selbst auf diesen Unterschied hin . Ich denke , dass das Denken über Apps wie sie sein müssen , wiederverwendbar in anderen Projekten ist gut . Auch eine gute Denkweise über Apps in Django bietet moderne Webanwendungen.
Stellen Sie sich vor, Sie erstellen eine große dynamische Web-App, die auf JavaScript basiert .
Sie können dann in der Django-App mit dem Namen "FrontEnd" <erstellen. In dieser App werden Inhalte angezeigt.
Dann erstellen Sie einige Backend-Apps. ZB App mit dem Namen "Kommentare", in der Benutzerkommentare gespeichert werden. Und die App "Kommentare" zeigt selbst nichts an. Es ist nur eine API für AJAX-Anforderungen Ihrer dynamischen JS- Website .
Auf diese Weise können Sie Ihre App "Kommentare" jederzeit wiederverwenden. Sie können es Open Source machen, ohne die Quelle des gesamten Projekts zu öffnen. Und Sie halten die Logik Ihres Projekts sauber .
quelle