/ django

Структура Django проекта

Все мы знаем что есть очень много вариантов структуры для Django проекта и большинство из них вполне нормальные, но я хочу рассказать как я храню проекты, и вообще структуру приложений в проекте

Для примера наш проект будет называться prjct. Для названий других примеров я буду добавлять к названию число, т.е. prjct1, prjct2 и тд. Для названия приложений я буду такую же структуру app0, app1, app2 и тд. В качестве пользователя будем использовать мифического юзера django

Структура проектов в директории ~/

Для хранения проектов я использую домашнюю директорию, никаких /var, /srv. Все проекты хранятся в директории ~/projects/ :

~/projects/
        project/
        project1/
        project2/
        …..

Каждый проект имеет свое виртуальное окружение, виртуальное окружение называется также как проект, все виртуальные окружения хранятся в директории ~/.envs/ :

~/.envs/ 
        project/
        project1/
        project2/
        …..

т.е. для доступа к любому виртуальному окружению проекта нужно ввести source ~/.envs/<имя_проекта>/bin/activate .

Все логи хранятся в директории ~/logs/, как вы уже поняли логи каждого проекта хранятся в своей директории с именем проекта:

~/logs/ 
        project/
                errors.log
                ... 
        project1/
                errors.log
                ...  
        project2/
                errors.log
                ...  
        ….. 

Всю статику и медиа файлы я храню в директории с проектом.

Структура проекта

~/projects/
        project/
                apps/ 
                        app1/
                                admin.py
                                models.py
                                …. 
                        app2/
                                admin.py
                                models.py
                                ….  
                        … 
                conf/
                        nginx/
                                project.conf 
                                ...
                        supervisor/
                                project.conf 
                                ...
                project/
                        settings.py
                        urls.py
                        ...
                run/
                        run.sh
                        ...
                staticfiles/
                        css/
                                project.css
                                ...
                        js/ 
                                project.js
                                ... 
                        … 
                templates/
                        base.html
                        …    
                fabfile.py
                manage.py 
                requirements.txt 
            media/
                    …   
            static/
                    …  

Теперь объясняю по порядку:

project/apps/
здесь хранятся все приложения проекта, в самом приложении хранятся middleware, context_processors и в все остальные части нужные для этого приложения, все части нужные для проекта целиком хранятся в project/project/
project/conf/
здесь хранятся все конфигурационные файлы для nginx, supervisor и тд.
project/project/
это приложение созданное при старте проекта, здесь хранятся settings, urls, middleware, context_processors для всего проетка
project/run/
скрипт запуска gunicorn
project/staticfiles/
статика, которая будет собираться collectstatic (эта папка хранится в git)
project/templates/
папка с шаблонами
fabfile.py
файл для Fabric
requirements.txt
файл с зависимостями
project/media/
папка с медиа файлами (не хранится в git)
project/static/
папка со всей статикой проекта после collectstatic (не хранится в git)

В общем это все, благодаря такой структуре можно без проблем создавать скрипты для создания окружения, использовать один и тот же fabfile.py и развертывать окружение почти на автомате.