Es gibt zwei Arten von Django "Projekten", die ich in meinem ~/projects/
Verzeichnis habe, beide haben eine etwas unterschiedliche Struktur:
- Eigenständige Websites
- Steckbare Anwendungen
Eigenständige Website
Meist private Projekte, muss es aber nicht sein. Es sieht normalerweise so aus:
~/projects/project_name/
docs/ # documentation
scripts/
manage.py # installed to PATH via setup.py
project_name/ # project dir (the one which django-admin.py creates)
apps/ # project-specific applications
accounts/ # most frequent app, with custom user model
__init__.py
...
settings/ # settings for different environments, see below
__init__.py
production.py
development.py
...
__init__.py # contains project version
urls.py
wsgi.py
static/ # site-specific static files
templates/ # site-specific templates
tests/ # site-specific tests (mostly in-browser ones)
tmp/ # excluded from git
setup.py
requirements.txt
requirements_dev.txt
pytest.ini
...
die Einstellungen
Die Haupteinstellungen sind Produktionseinstellungen. Andere Dateien (zB. staging.py
,
development.py
) Einfach importiert alles aus production.py
und nur notwendige Variablen außer Kraft setzen.
Für jede Umgebung gibt es separate Einstellungsdateien, z. Produktion, Entwicklung. Ich habe einige Projekte, die ich auch testen (für Test Runner), Staging (als Überprüfung vor der endgültigen Bereitstellung) und Heroku (für die Bereitstellung auf Heroku) Einstellungen.
Bedarf
Ich spezifiziere die Anforderungen eher direkt in setup.py. Nur die für die Entwicklungs- / Testumgebung erforderlichen, in der ich mich befinde requirements_dev.txt
.
Einige Dienste (z. B. Heroku) müssen requirements.txt
im Stammverzeichnis vorhanden sein.
setup.py
Nützlich beim Bereitstellen von Projekten mit setuptools
. Sie fügt hinzu , manage.py
zu PATH
, so dass ich laufen kann manage.py
(überall) direkt.
Projektspezifische Apps
Ich habe diese Apps in ein project_name/apps/
Verzeichnis gestellt und sie mit relativen Importen importiert.
Templates / static / locale / tests files
Ich habe diese Vorlagen und statischen Dateien in einem globalen Vorlagen- / statischen Verzeichnis abgelegt, nicht in jeder App. Diese Dateien werden normalerweise von Personen bearbeitet, denen Projektstruktur oder Python überhaupt nicht wichtig sind. Wenn Sie ein Full-Stack-Entwickler sind, der alleine oder in einem kleinen Team arbeitet, können Sie pro App Vorlagen / statisches Verzeichnis erstellen. Es ist wirklich nur eine Frage des Geschmacks.
Gleiches gilt für das Gebietsschema, obwohl es manchmal praktisch ist, ein separates Gebietsschemaverzeichnis zu erstellen.
Tests sind normalerweise besser in jeder App zu platzieren, aber normalerweise gibt es viele Integrations- / Funktionstests, bei denen mehr Apps zusammenarbeiten, sodass ein globales Testverzeichnis sinnvoll ist.
Tmp-Verzeichnis
Im Projektstamm befindet sich ein temporäres Verzeichnis, das von VCS ausgeschlossen ist. Es wird verwendet, um Medien- / statische Dateien und SQLite-Datenbanken während der Entwicklung zu speichern. Alles in tmp konnte jederzeit problemlos gelöscht werden.
Virtualenv
Ich bevorzuge virtualenvwrapper
und lege alle venvs in ein ~/.venvs
Verzeichnis, aber du könntest es hineinlegen tmp/
, um es zusammen zu halten.
Projektvorlage
Ich habe eine Projektvorlage für dieses Setup erstellt, die Django-Start-Vorlage
Einsatz
Die Bereitstellung dieses Projekts erfolgt wie folgt:
source $VENV/bin/activate
export DJANGO_SETTINGS_MODULE=project_name.settings.production
git pull
pip install -r requirements.txt
# Update database, static files, locales
manage.py syncdb --noinput
manage.py migrate
manage.py collectstatic --noinput
manage.py makemessages -a
manage.py compilemessages
# restart wsgi
touch project_name/wsgi.py
Sie können rsync
anstelle von verwenden git
, müssen jedoch eine Reihe von Befehlen ausführen, um Ihre Umgebung zu aktualisieren.
Kürzlich habe ich eine [django-deploy][2]
App erstellt, mit der ich einen einzelnen Verwaltungsbefehl ausführen kann, um die Umgebung zu aktualisieren. Ich habe sie jedoch nur für ein Projekt verwendet und experimentiere immer noch damit.
Skizzen und Entwürfe
Entwurf von Vorlagen, die ich in ein globales templates/
Verzeichnis lege . Ich denke, man kann einen Ordner sketches/
im Projektstamm erstellen , hat ihn aber noch nicht verwendet.
Steckbare Anwendung
Diese Apps sind normalerweise für die Veröffentlichung als Open Source vorbereitet. Ich habe unten ein Beispiel aus Django-Forme genommen
~/projects/django-app/
docs/
app/
tests/
example_project/
LICENCE
MANIFEST.in
README.md
setup.py
pytest.ini
tox.ini
.travis.yml
...
Der Name der Verzeichnisse ist klar (hoffe ich). Ich habe Testdateien außerhalb des App-Verzeichnisses abgelegt, aber das spielt wirklich keine Rolle. Es ist wichtig, README
und bereitzustellen setup.py
, damit das Paket einfach über installiert werden kann pip
.
scripts
Schlüsselwortargument hinzu: github.com/elvard/django-start-template/blob/master/project/… Ich mag es,tmp
weil es "etwas Temporäres" vorschlägt, das jederzeit entfernt werden kann. Toplevellocale
dir ist nicht notwendig, du kannst es überall platzieren. Ich mag es einfach, wenn es mit statischen / Vorlagen-Verzeichnissen übereinstimmt.git checkout
beim Klonen des Projektverzeichnisses nur ein Verzeichnis 'tmp' verwendet oder ausgeschlossen wird. Es scheint also, dass Ihre Struktur alle Anforderungen erfüllt und klar genug ist, um ohne Zweifel regelmäßig verwendet zu werden. Ich akzeptiere deine Antwort. Danke dir.src
innerhalb des Projektstamms. Dies ist die Arbeitskopie der Quelldateien und des Git-Repository-Stamms. Ich kann mehrere Kopien dieses Verzeichnis machen -src
,src.bak
,src_tmp
und so weiter. Andere nicht-Repo - dirs wieenv
,tmp
,media
,backup
auf dem gleichen Niveau. So kann ichcp -r src src.bak
jederzeit mit git experimentieren oder Versionen mit einem externen Tool vergleichen. Während Sie lokale Dateien in Ihrem Repository haben, habe ich Repository in meinem lokalen Dateiverzeichnis (umgekehrt). Der bessere Name meinessrc
Verzeichnisses istrepo
.Meine Antwort basiert auf meiner eigenen Arbeitserfahrung und hauptsächlich auf dem Buch Two Scoops of Django, das ich sehr empfehlen kann und in dem Sie eine detailliertere Erklärung für alles finden. Ich werde nur einige der Punkte beantworten, und jede Verbesserung oder Korrektur wird begrüßt. Es kann aber auch korrektere Manieren geben, um den gleichen Zweck zu erreichen.
Projekte
Ich habe einen Hauptordner in meinem persönlichen Verzeichnis, in dem ich alle Projekte verwalte, an denen ich arbeite.
Quelldateien
Ich persönlich benutze die django Projekt Wurzel als Repository Wurzel meiner Projekte. Aber in dem Buch wird empfohlen, beide Dinge zu trennen. Ich denke, dass dies ein besserer Ansatz ist, und hoffe, dass ich meine Projekte schrittweise ändern kann.
Repository
Git oder Mercurial scheinen die beliebtesten Versionskontrollsysteme unter Django-Entwicklern zu sein. Und die beliebtesten Hosting-Dienste für Backups GitHub und Bitbucket .
Virtuelle Umgebung
Ich verwende virtualenv und virtualenvwrapper. Nach der Installation des zweiten müssen Sie Ihr Arbeitsverzeichnis einrichten. Meins befindet sich in meinem Verzeichnis / home / envs , wie im Installationshandbuch für virtualenvwrapper empfohlen. Aber ich denke nicht, dass das Wichtigste ist, wo es platziert wird. Das Wichtigste bei der Arbeit mit virtuellen Umgebungen ist, die Datei require.txt auf dem neuesten Stand zu halten.
Statischer
Stammprojektordner
Ordner " Media Root Project"
README
Repository-Stammverzeichnis
LICENSE
Repository-Stammverzeichnis
Dokumenten-
Repository-Stammverzeichnis. Diese Python-Pakete können Ihnen dabei helfen, die Verwaltung Ihrer Dokumentation zu vereinfachen:
Skizzen
Beispiele
Datenbank
quelle
Ich möchte kein neues
settings/
Verzeichnis erstellen . Ich füge einfach Dateien mit dem Namen hinzusettings_dev.py
undsettings_production.py
muss die nicht bearbeitenBASE_DIR
. Der folgende Ansatz erhöht die Standardstruktur, anstatt sie zu ändern.Ich denke das:
ist besser als das:
Dieses Konzept gilt auch für andere Dateien.
Normalerweise platziere ich
node_modules/
undbower_components/
im Projektverzeichnis innerhalb des Standardordnersstatic/
.Irgendwann ein
vendor/
Verzeichnis für Git-Submodule, aber normalerweise lege ich sie in denstatic/
Ordner.quelle
Folgendes folge ich auf meinem System.
Alle Projekte : In meinem Home-Ordner befindet sich ein Projektverzeichnis, d
~/projects
. H. Alle Projekte ruhen darin.Einzelprojekt : Ich folge einer standardisierten Strukturvorlage, die von vielen Entwicklern als Django-Skel für Einzelprojekte verwendet wird. Es kümmert sich im Grunde um alle Ihre statischen Dateien und Mediendateien und alles.
Virtuelle Umgebung : Ich habe einen Ordner für virtuelle Umgebungen in meinem Haus, in dem alle virtuellen Umgebungen im System gespeichert werden können
~/virtualenvs
. Dies gibt mir die Flexibilität, dass ich weiß, welche virtuellen Umgebungen ich habe und wie sie einfach aussehen könnenDie obigen 3 sind die Hauptpartitionen meiner Arbeitsumgebung.
Alle anderen Teile, die Sie erwähnt haben, hängen hauptsächlich von Projekt zu Projekt ab (dh Sie können unterschiedliche Datenbanken für unterschiedliche Projekte verwenden). Sie sollten also in ihren einzelnen Projekten wohnen.
quelle
Gemäß dem Django-Projektskelett ist die richtige Verzeichnisstruktur, die befolgt werden kann:
Die neueste Verzeichnisstruktur finden Sie unter https://django-project-skeleton.readthedocs.io/en/latest/structure.html .
quelle
Sie können das https://github.com/Mischback/django-project-skeleton Repository verwenden.
Führen Sie den folgenden Befehl aus:
Die Struktur ist ungefähr so:
quelle