Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
С чего начинаешь работу над проектом с 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 настроены (переменные окружения) ✅ БД подключена ✅ Миграции выполнены ✅ Тестирование настроено ✅ Основная структура готова
Правильная подготовка проекта на начальном этапе экономит месяцы работы в будущем и предотвращает кучу проблем. Это инвестиция в качество кода и удобство разработки.