March 27, 2024
Что нужно знать python backend developer для устройства на работу
Пару лет назад я уже писал подобный пост. Тогда он был основан на моём личном опыте в найме (текущий, в общем-то тоже), пришло время актуализировать список. Если считаете, что я что-то упустил, то жду ваших предложений в комментариях.
Фреймворки
Базы данных
Основы
- HTTP-протокол, HTTP-методы,
- что такое REST, REST API, RESTful,
- что такое CORS и как его победить,
- linux/unix на уровне понимания работы по SSH, права доступа,
- понимание концепции MVC и принципа работы паттерна репозиторий (больше нужен для работы с SQLAlchemy),
- вопросы для подготовки к интервью (список там довольно большой, обращайте внимание на те моменты, по которым вы совсем ничего не знаете).
Что нужно знать в django
Обязательно
- работа с django ORM: https://docs.djangoproject.com/en/5.0/topics/db/queries/,
- миграции в django ORM: https://docs.djangoproject.com/en/5.0/topics/migrations/,
- менеджеры моделей: https://docs.djangoproject.com/en/5.0/topics/db/managers/,
- сериализаторы, представления и права доступа из DRF: https://www.django-rest-framework.org/tutorial/quickstart/,
- работа с фильтрами через django-filter: https://django-filter.readthedocs.io/en/stable/guide/usage.html.
Опционально
- формы: https://docs.djangoproject.com/en/5.0/ref/forms/,
- admin actions: https://docs.djangoproject.com/en/5.0/ref/contrib/admin/actions/,
- оптимизация запросов в Django ORM: https://t.me/davidobryakov/1195,
- отправка почтовых уведомлений: https://docs.djangoproject.com/en/5.0/topics/email/.
На уровне концепции
- работа с админкой (кастомизация вывода, фильтры итд): https://docs.djangoproject.com/en/5.0/ref/contrib/admin/,
- сигналы: https://docs.djangoproject.com/en/5.0/topics/signals/ (на уровне концепции)
Будет плюсом
- важная проблема с админкой, о которой стоит знать: https://stackoverflow.com/questions/16755312/django-admin-change-form-load-quite-slow
Полезные библиотеки и ссылки для django
- библиотека для установки настроек CORS: https://github.com/adamchainz/django-cors-headers,
- библиотека для авторизации и регистрации через DRF: https://djoser.readthedocs.io/en/latest/,
- библиотека для создания динамической конфигурации приложения, хранимой в БД: https://django-constance.readthedocs.io/en/latest/,
- библиотека, добавляющая хуки жизненного цикла для моделей Django: https://rsinger86.github.io/django-lifecycle/,
- библиотека, предоставляющая кастомную админку с большим количеством настроек: https://django-jazzmin.readthedocs.io/,
- практические советы для начинающих Django-разработчиков: https://t.me/davidobryakov/1184,
- подборка лучших библиотек для Django: https://t.me/davidobryakov/1139,
курс по Django на MDN: https://developer.mozilla.org/ru/docs/Learn/Server-side/Django, - мой шаблон для Django-проектов: https://github.com/kantegory/django-template.
Что нужно знать/уметь в FastAPI/Flask
Обязательно
- работа с ORM SQLAlchemy: https://docs.sqlalchemy.org/en/20/intro.html,
- работа с alembic: https://alembic.sqlalchemy.org/en/latest/,
- понимание async/await: https://docs.python.org/3/library/asyncio-task.html.
Опционально
- работа с TortoiseORM: https://tortoise.github.io/index.html.
Полезные ссылки по FastAPI/Flask
- библиотека для работы с пользователями, авторизацией и регистрацией: https://fastapi-users.github.io/fastapi-users/latest/,
- админка, работающая с TortoiseORM: https://github.com/fastapi-admin/fastapi-admin,
- админка, работающая с SQLAlchemy: https://github.com/aminalaee/sqladmin,
- библиотека, упрощающая взаимодействие с SQLAlchemy: https://github.com/e-kondr01/fastapi-sqlalchemy-toolkit.
Общие требования
- работа с очередями задач с помощью Celery + Redis/Celery + RabbitMQ (выполнение периодических или отложенных задач, например, отправка электронной почты),
- настройка общения между сервисами посредством RabbitMQ
Инструменты
- git (тренажёр: https://learngitbranching.js.org/?locale=ru_RU),
- docker, docker compose (на уровне: могу прочесть конфиг, могу запустить проект, могу написать свой простой конфиг),
- gunicorn/uvicorn (иметь представление о том что это и для чего используется),
- nginx (понимание на уровне директив location и upstream).