Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+717новых вакансий за сутки·60 871вакансия открыта сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании5 951
РезюмеAIПодготовкаСтатьи
ТарифыТарифы
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 391 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python9 224
  • Облачные технологии4 076
  • QA вакансии1 588
  • Android1 322
  • Инженер данных805
  • Продакт-менеджер368

Разработка

  • Backend вакансии1 317
  • iOS1 239
  • AI вакансии608
  • Fullstack вакансии523
  • Frontend вакансии456
  • Mobile вакансии28

По стеку

  • Go5 445
  • Java3 175
  • Kotlin1 119
  • Node.js1 026
  • Rust949
  • .NET666
  • PHP311
  • C#210
  • C++204

DevOps и инфраструктура

  • DevOps вакансии2 713
  • Kubernetes2 308
  • Linux-инфраструктура1 890
  • Terraform / IaC1 406
  • CI/CD842
  • Мониторинг и Observability645
  • SRE226
  • Кибербезопасность84

Аналитика и данные

  • Аналитик данных483
  • Data Scientist469
  • Бизнес-аналитик349
  • Системный аналитик48

Другие направления

  • Проджект-менеджер139
  • UI/UX дизайн71
  • Ручное тестирование14

По регионам

  • Вакансии в США24 791
  • Вакансии в Европе9 439
  • Работа в России2 924
  • Вакансии в Канаде2 178

По формату

  • Удалённые вакансии43 505
  • Релокация в США24 791
  • Гибридная работа3 370
  • Офисная работа2 525

По уровню

  • Senior вакансии20 898
  • Middle вакансии12 438
  • Junior вакансии3 864

Сейчас нанимают

Все компании
  • Wise191 вакансия
  • Rakuten188 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Celonis48 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме DjangoВсе вопросы
DjangoSeniorОпыт

Какие production-риски есть у Django: blocking code, connection pooling, config, auth, observability, deploy или graceful shutdown?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Ключевые production-риски Django: синхронный ORM блокирует ASGI-воркеры, пул соединений требует pgbouncer, секреты в settings.py утекают в репо, SESSION_COOKIE_SECURE=False открывает session hijacking, отсутствие structured logging и health-check усложняет observability.

1. Blocking code в ASGI-окружении

Django ORM — синхронный. При запуске под Uvicorn/Daphne с async views вызов Model.objects.filter() напрямую блокирует event loop, что убивает конкурентность.

# Плохо — блокирует event loop
async def my_view(request):
    users = list(User.objects.all())  # блокирующий вызов!
    ...

# Правильно — sync_to_async обёртка
from asgiref.sync import sync_to_async

async def my_view(request):
    users = await sync_to_async(list)(User.objects.all())
    # или через database_sync_to_async декоратор
    ...

Production-риски Django

2. Connection pooling

Django открывает одно соединение с БД на поток. Gunicorn с --workers=8 --threads=4 создаёт 32 соединения. При масштабировании PostgreSQL быстро упирается в max_connections=100.

# settings.py — уменьшить CONN_MAX_AGE чтобы не держать соединения
DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "CONN_MAX_AGE": 60,  # секунды (0 = закрывать после каждого запроса)
        "OPTIONS": {
            "pool": True,  # Django 5.1+ встроенный пул
        },
    }
}
# Или через pgbouncer как внешний пулер (рекомендуется)

3. Конфигурация и секреты

# settings.py — читать секреты только из окружения
import os
from pathlib import Path

SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]  # не os.getenv() — ошибка при отсутствии
DEBUG = os.getenv("DEBUG", "False") == "True"
ALLOWED_HOSTS = os.environ["ALLOWED_HOSTS"].split(",")

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql",
        "NAME": os.environ["DB_NAME"],
        "USER": os.environ["DB_USER"],
        "PASSWORD": os.environ["DB_PASSWORD"],
        "HOST": os.environ["DB_HOST"],
    }
}

4. Auth и безопасность cookies

# settings.py — обязательные настройки для HTTPS
SESSION_COOKIE_SECURE = True      # cookie только по HTTPS
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = True    # недоступен из JS
SESSION_COOKIE_SAMESITE = "Lax"   # защита от CSRF
SECURE_HSTS_SECONDS = 31536000
SECURE_SSL_REDIRECT = True
SECURE_BROWSER_XSS_FILTER = True

5. Observability: структурированные логи

# settings.py
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "json": {
            "()": "pythonjsonlogger.jsonlogger.JsonFormatter",
            "format": "%(asctime)s %(name)s %(levelname)s %(message)s",
        },
    },
    "handlers": {
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "json",
        },
    },
    "root": {"handlers": ["console"], "level": "INFO"},
    "loggers": {
        "django.request": {"level": "WARNING"},
        "django.db.backends": {"level": "WARNING"},  # ERROR в проде
    },
}

6. Graceful shutdown и health-check

# myapp/views.py — health endpoint для load balancer
from django.db import connections
from django.db.utils import OperationalError
from django.http import JsonResponse

def health_check(request):
    try:
        connections["default"].ensure_connection()
        return JsonResponse({"status": "ok"})
    except OperationalError:
        return JsonResponse({"status": "db_unavailable"}, status=503)

Gunicorn поддерживает graceful shutdown через сигнал SIGTERM — завершает текущие запросы до graceful_timeout секунд. Настройка: --graceful-timeout 30.

7. Deploy без downtime

gunicorn myproject.wsgi:application \
  --workers 4 \
  --worker-class gthread \
  --threads 2 \
  --bind 0.0.0.0:8000 \
  --graceful-timeout 30 \
  --timeout 60 \
  --access-logfile -

Подводные камни

  • DEBUG=True в проде — раскрывает полный traceback с переменными окружения (включая SECRET_KEY) всем клиентам при 500-ошибке.
  • Миграции при деплое — запуск migrate во время работы без backward-compatible схемы ломает старые запущенные инстансы.
  • ALLOWED_HOSTS=[] по умолчанию — при DEBUG=False и пустом ALLOWED_HOSTS все запросы вернут 400.
  • Celery воркеры не получают SIGTERM корректно — без --statedb и правильного обработчика сигналов задачи теряются при остановке контейнера.
  • django.contrib.staticfiles в проде — DEBUG=True обслуживает статику через Django; в проде нужен collectstatic и nginx/CDN.
  • CONN_MAX_AGE=0 плюс pgbouncer в transaction mode — несовместимы с CONN_MAX_AGE > 0; persistent-соединения и pgbouncer transaction pooling конфликтуют.

Частые вопросы на собеседовании

  • Как Django защищает от SQL-инъекций, CSRF и XSS-атак?
  • Как организовать настройки, secrets и environment-specific config без утечек?
  • Объясните жизненный цикл запроса/ответа в Django — от разрешения URL до HTTP-ответа.
  • Что такое проблема N+1 запросов в Django и как её обнаружить и исправить?

Что портит ответ

  • Говорить только о запуске Django, но не об эксплуатации
  • Не упоминать observability, обновления, безопасность и rollback
  • Описывать риски абстрактно, без способов их снижать

Что слушает интервьюер

  • Видит production-риски Django
  • Говорит про monitoring, rollout, rollback и безопасность
  • Умеет ранжировать риски по вероятности и влиянию

Как вы знаете этот вопрос?

Проверить себя по теме Django →
←Предыдущий вопросКак реализовать rate limiting и throttling в Django REST Framework?Следующий вопрос→Что такое объект `Q` в Django и как он используется для сложных запросов?

Связанные темы

Djangoproduction-readinesstechnical-communicationtechnology-selectiontrade-off-analysis

Вакансии с этим навыком

  • Разработчик Python (ИИ-помощник)
  • Middle/Senior Full-Stack Python Engineer (Django) (#5841)
  • Junior Fullstack-разработчик (AI-assisted development)
  • Lead Python Developer (Django)
  • Python Team Lead