Istnieją dwa rodzaje "projektów" Django, które mam w swoim ~/projects/
katalogu, oba mają nieco inną strukturę .:
- Niezależne witryny internetowe
- Aplikacje wtykowe
Samodzielna witryna internetowa
W większości projekty prywatne, ale nie musi. Zwykle wygląda to tak:
~/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
...
Ustawienia
Główne ustawienia to ustawienia produkcyjne. Inne pliki, np. ( staging.py
,
development.py
) Po prostu wszystko z importu production.py
i nadpisać tylko niezbędne zmienne.
Dla każdego środowiska istnieją osobne pliki ustawień, np. produkcja, rozwój. W niektórych projektach mam również ustawienia testowania (dla test runner), staging (jako sprawdzenie przed ostatecznym wdrożeniem) i heroku (do wdrożenia w heroku).
Wymagania
Raczej określam wymagania bezpośrednio w setup.py. Tylko te, które są wymagane dla środowiska programistycznego / testowego, które mam w requirements_dev.txt
.
Niektóre usługi (np. Heroku) wymagają posiadania requirements.txt
w katalogu głównym.
setup.py
Przydatne podczas wdrażania projektu przy użyciu setuptools
. Dodaje manage.py
się PATH
, więc mogę uruchomić manage.py
bezpośrednio (gdziekolwiek).
Aplikacje specyficzne dla projektu
Kiedyś umieszczałem te aplikacje w project_name/apps/
katalogu i importowałem je za pomocą importu względnego.
Pliki szablonów / statyczne / locale / testy
Umieszczam te szablony i pliki statyczne w globalnym katalogu szablonów / statycznym, a nie w każdej aplikacji. Te pliki są zwykle edytowane przez osoby, które w ogóle nie przejmują się strukturą kodu projektu ani Pythonem. Jeśli jesteś programistą z pełnym stosem pracującym samodzielnie lub w małym zespole, możesz utworzyć szablony dla aplikacji / katalog statyczny. To naprawdę tylko kwestia gustu.
To samo dotyczy ustawień regionalnych, chociaż czasami wygodnie jest utworzyć oddzielny katalog ustawień regionalnych.
Testy zwykle lepiej jest umieścić w każdej aplikacji, ale zwykle jest wiele testów integracyjnych / funkcjonalnych, które testują więcej aplikacji pracujących razem, więc globalny katalog testów ma sens.
Katalog Tmp
W katalogu głównym projektu znajduje się katalog tymczasowy, wykluczony z VCS. Służy do przechowywania plików multimedialnych / statycznych i bazy danych sqlite podczas programowania. Wszystko w tmp można było usunąć w dowolnym momencie bez żadnych problemów.
Virtualenv
Wolę virtualenvwrapper
i umieszczam wszystkie venvy w ~/.venvs
katalogu, ale możesz umieścić je w środku, tmp/
aby zachować je razem.
Szablon projektu
Stworzyłem szablon projektu dla tej konfiguracji, django-start-template
Rozlokowanie
Wdrożenie tego projektu jest następujące:
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
Możesz użyć rsync
zamiast git
, ale nadal musisz uruchomić pakiet poleceń, aby zaktualizować środowisko.
Niedawno zrobiłem [django-deploy][2]
aplikację, która pozwala mi na uruchomienie jednej komendy zarządzającej aktualizacją środowiska, ale używałem jej tylko do jednego projektu i wciąż z nią eksperymentuję.
Szkice i szkice
Szkice szablonów umieszczam w templates/
katalogu globalnym . Wydaje mi się, że można utworzyć folder sketches/
w katalogu głównym projektu, ale jeszcze go nie używano.
Wtykowa aplikacja
Te aplikacje są zwykle przygotowywane do publikacji jako open-source. Poniżej wziąłem przykład z django-forme
~/projects/django-app/
docs/
app/
tests/
example_project/
LICENCE
MANIFEST.in
README.md
setup.py
pytest.ini
tox.ini
.travis.yml
...
Nazwy katalogów są jasne (mam nadzieję). Pliki testowe umieszczam poza katalogiem aplikacji, ale to naprawdę nie ma znaczenia. Ważne jest, aby zapewnić README
i setup.py
, więc pakiet można łatwo zainstalować za pomocą pip
.
scripts
argument słowa kluczowego: github.com/elvard/django-start-template/blob/master/project/… Podoba mi się,tmp
ponieważ sugeruje "coś tymczasowego", które można usunąć w dowolnym momencie. Katalog najwyższego poziomulocale
nie jest konieczny, możesz go umieścić w dowolnym miejscu. Po prostu podoba mi się spójność z reżami static / templates.git checkout
lub wykluczając tylko jeden katalog „tmp” podczas klonowania katalogu projektu. Wygląda więc na to, że Twoja konstrukcja spełnia wszystkie wymagania i jest wystarczająco jasna, aby używać jej regularnie, bez żadnych wątpliwości. Przyjmuję twoją odpowiedź. Dziękuję Ci.src
katalog w katalogu głównym projektu. To jest robocza kopia plików źródłowych i katalogu głównego repozytorium git. Mogę zrobić kilka kopii tego katalogu -src
,src.bak
,src_tmp
i tak dalej. Inne katalogi non-repo jakenv
,tmp
,media
,backup
znajdujących się na tym samym poziomie. Wcp -r src src.bak
każdej chwili mogę więc poeksperymentować z gitem lub porównać wersje z zewnętrznym narzędziem. Chociaż masz pliki lokalne w swoim repozytorium, mam je w katalogu moich plików lokalnych (odwrotnie). Lepsza nazwa mojegosrc
reżrepo
.Moja odpowiedź jest inspirowana moim własnym doświadczeniem zawodowym, a przede wszystkim książką Two Scoops of Django, którą bardzo polecam, w której możesz znaleźć bardziej szczegółowe wyjaśnienie wszystkiego. Odpowiem tylko na kilka punktów, a wszelkie ulepszenia lub poprawki będą mile widziane. Ale mogą być też bardziej poprawne sposoby na osiągnięcie tego samego celu.
Projekty
Mam główny folder w moim katalogu osobistym, w którym zarządzam wszystkimi projektami, nad którymi pracuję.
Pliki źródłowe
Osobiście używam katalogu głównego projektu django jako katalogu głównego repozytorium moich projektów. Ale w książce zaleca się oddzielenie obu rzeczy. Myślę, że jest to lepsze podejście, więc mam nadzieję, że zacznę stopniowo wprowadzać zmiany w moich projektach.
Repozytorium
Git lub Mercurial wydają się być najpopularniejszymi systemami kontroli wersji wśród programistów Django. Oraz najpopularniejsze usługi hostingowe do tworzenia kopii zapasowych GitHub i Bitbucket .
Środowisko wirtualne
Używam virtualenv i virtualenvwrapper. Po zainstalowaniu drugiego musisz skonfigurować katalog roboczy. Mój znajduje się w moim katalogu / home / envs , tak jak jest to zalecane w przewodniku instalacji virtualenvwrapper. Ale nie sądzę, że najważniejsze jest to, gdzie jest umieszczony. Najważniejszą rzeczą podczas pracy ze środowiskami wirtualnymi jest aktualizacja pliku Require.txt.
Statyczny
folder projektu głównego
Folder Media Root Project
README
Katalog główny repozytorium
LICENCJA
Katalog główny repozytorium
Katalog główny repozytorium dokumentów . Te pakiety Pythona mogą pomóc w łatwiejszym zarządzaniu dokumentacją:
Szkice
Przykłady
Baza danych
źródło
Nie lubię tworzyć nowego
settings/
katalogu. Ja po prostu dodać pliki o nazwachsettings_dev.py
asettings_production.py
więc nie trzeba edytowaćBASE_DIR
. Poniższe podejście zwiększa domyślną strukturę zamiast ją zmieniać.Myślę, że to:
jest lepsze niż to:
Ta koncepcja dotyczy również innych plików.
Zwykle umieszczam
node_modules/
ibower_components/
w katalogu projektu w domyślnymstatic/
folderze.Czasami
vendor/
katalog dla podmodułów Git, ale zwykle umieszczam je wstatic/
folderze.źródło
Oto, co śledzę w moim systemie.
Wszystkie projekty : w moim katalogu domowym znajduje się katalog projektów, tj
~/projects
. Wszystkie projekty spoczywają w nim.Projekt indywidualny : kieruję się standardowym szablonem struktury używanym przez wielu programistów o nazwie django-skel dla indywidualnych projektów. Zasadniczo zajmuje się wszystkimi plikami statycznymi i plikami multimedialnymi i wszystkim.
Środowisko wirtualne : mam folder virtualenvs w moim domu do przechowywania wszystkich środowisk wirtualnych w systemie, tj
~/virtualenvs
. Daje mi to elastyczność polegającą na tym, że wiem, jakie mam wszystkie środowiska wirtualne i mogę łatwo wyglądać w użyciuPowyższe 3 to główne partycje Mojego środowiska pracy.
Wszystkie inne części, o których wspomniałeś, zależą głównie od projektu do projektu (tj. Możesz używać różnych baz danych dla różnych projektów). Powinni więc przebywać w swoich indywidualnych projektach.
źródło
Zgodnie ze szkieletem projektu Django, prawidłowa struktura katalogów, której można przestrzegać, to:
Odwiedź https://django-project-skeleton.readthedocs.io/en/latest/structure.html, aby uzyskać najnowszą strukturę katalogów.
źródło
Możesz skorzystać z repozytorium https://github.com/Mischback/django-project-skeleton .
Uruchom poniższe polecenie:
Struktura wygląda mniej więcej tak:
źródło