← Назад к вопросам

С чего начинаешь работу над проектом с Django

2.0 Middle🔥 121 комментариев
#Django

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

С чего начинаешь работу над проектом с Django

При старте работы над новым Django проектом, я следую проверенному порядку действий, который гарантирует чистую архитектуру и избегает технических долгов на ранних этапах.

1. Инициализация и окружение

Прежде всего создаю виртуальное окружение и устанавливаю необходимые зависимости:

# Создание проекта
python -m venv venv
source venv/bin/activate  # или venv\Scripts\activate на Windows

# Установка Django и базовых зависимостей
pip install django
pip install python-decouple  # Для управления переменными окружения
pip install djangorestframework  # Если нужно REST API
pip install celery  # Для асинхронных задач
pip install pytest-django  # Для тестирования

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

Создаю проект с правильной структурой, используя layered architecture (многослойная архитектура):

# Команда создания проекта
django-admin startproject config .
django-admin startapp domain
django-admin startapp application
django-admin startapp infrastructure
django-admin startapp presentation

Этот подход обеспечивает разделение ответственности:

  • domain/ — бизнес-логика (модели, исключения, сущности)
  • application/ — use cases и сценарии использования
  • infrastructure/ — работа с БД, внешними сервисами
  • presentation/ — API endpoints, форматирование ответов

3. Конфигурация settings.py

Переношу чувствительные данные в переменные окружения:

from decouple import config, Csv
import os
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent

SECRET_KEY = config("SECRET_KEY")
DEBUG = config("DEBUG", default=False, cast=bool)
ALLOWED_HOSTS = config("ALLOWED_HOSTS", default="localhost", cast=Csv())

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "rest_framework",
    "corsheaders",
]

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": config("DB_NAME"),
        "USER": config("DB_USER"),
        "PASSWORD": config("DB_PASSWORD"),
        "HOST": config("DB_HOST"),
        "PORT": config("DB_PORT", default="5432"),
    }
}

4. Создание .env файла

Создаю файл для локальной конфигурации:

# .env
SECRET_KEY=your-secret-key-here
DEBUG=True
ALLOWED_HOSTS=localhost,127.0.0.1
DB_NAME=myproject
DB_USER=postgres
DB_PASSWORD=password
DB_HOST=localhost
DB_PORT=5432

5. Настройка моделей и базы данных

Создаю domain models в правильном слое:

# domain/models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    """Расширенная модель пользователя"""
    phone_number = models.CharField(max_length=20, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        app_label = "domain"

    def __str__(self):
        return self.email

Затем выполняю миграции:

# В терминале
python manage.py makemigrations
python manage.py migrate

6. Настройка тестирования

Создаю pytest.ini для быстрых и изолированных тестов:

# pytest.ini
[pytest]
DJANGO_SETTINGS_MODULE = config.settings
python_files = tests.py test_*.py *_tests.py
addopts = --reuse-db --cov=. --cov-report=html

7. REST API маршруты

Регистрирую endpoints в приложении presentation:

# presentation/urls.py
from rest_framework.routers import DefaultRouter
from . import views

router = DefaultRouter()
router.register(r"users", views.UserViewSet)

urlpatterns = router.urls

8. Создание .gitignore

Обязательно исключаю чувствительные файлы:

# .gitignore
venv/
.env
.env.local
*.pyc
__pycache__/
.pytest_cache/
.coverage
db.sqlite3

Итоговый чеклист

✅ Виртуальное окружение создано ✅ Зависимости установлены ✅ Проект структурирован по слоям ✅ Settings настроены (переменные окружения) ✅ БД подключена ✅ Миграции выполнены ✅ Тестирование настроено ✅ Основная структура готова

Правильная подготовка проекта на начальном этапе экономит месяцы работы в будущем и предотвращает кучу проблем. Это инвестиция в качество кода и удобство разработки.

С чего начинаешь работу над проектом с Django | PrepBro