Собеседование в X5 Tech: ключевые вопросы по Django
Ключевые тезисы:
- Вопросы на собеседовании часто касаются практического применения Django и его компонентов.
- Важен не заученный ответ, а понимание принципов работы и опыт решения задач.
- Основные темы: валидация, админка, ORM, работа с базами данных и производительность.
Метод clean() в моделях Django
Это "умная" проверка перед сохранением объекта.
- Принцип работы: Проверяет целостность данных и логические противоречия между полями модели.
- Примеры использования:
- Проверка дат: дата вылета обратно не может быть раньше даты вылета туда.
- Проверка скидки: значение не может превышать 100%.
- Результат: При обнаружении противоречия метод выбрасывает ошибку и не позволяет сохранить объект.
Django Admin
Панель администратора для управления данными проекта.
- Настройка: Производится через код в файле
admin.py(регистрация моделей, добавление поиска, фильтров). - Преимущества:
- Управление данными без написания SQL-запросов (работает через ORM).
- Возможность настройки ролей доступа и создания пользователей.
Ссылочные переходы в Django Admin
Задача: Сделать поле-ссылку для перехода на связанный объект.
- Пример: В списке заказов отображается ID клиента. Кликая на него, администратор попадает на страницу этого клиента.
- Реализация: В кастомном
ModelAdminможно переопределить методlist_displayили создать собственный метод, который возвращает HTML-ссылку.
Связи между моделями в разных базах данных
- Ограничение Django ORM: Не поддерживает
ForeignKeyмежду таблицами из разных физических баз данных, так как это нарушает целостность данных. - Обходное решение: Хранить не внешний ключ, а
UUIDили числовой ID. Связь устанавливается логически: сначала получить ID из одной таблицы, затем найти запись с таким ID в другой.
Таймауты (Timeouts)
Защита от "подвисающих" запросов.
- Проблема: Долгий запрос (например, более 10 секунд) может заблокировать пул соединений к БД, что приведёт к падению производительности сайта.
- Принцип: "Быстрая ошибка лучше долгой загрузки". Таймаут принудительно завершает запрос, если он выполняется дольше заданного времени.
- Способы установки:
- Для всех запросов: Через настройки базы данных в
settings.py(параметр'OPTIONS': {'statement_timeout': 5000}). - Для конкретного запроса: Использовать декоратор, замеряющий время выполнения.
- Для всех запросов: Через настройки базы данных в
Выводы и рекомендации
- Главный урок: Для успешного прохождения собеседований критически важен практический опыт, а не заученная теория.
- Статистика: Около 80% кандидатов отсеиваются на подобных вопросах из-за отсутствия глубокого понимания.
- Подготовка: Следует фокусироваться на понимании "как это работает" и "как это применить", а не на механическом запоминании.