Что нужно знать python backend developer для устройства на работу
#django #python #backend
Сегодня по просьбе подруги составил список всех вещей, которые, на мой взгляд, позволят вам устроиться на работу на должность "Python Backend Developer". Это не то, что бы выжимка из вакансий, скорее, мой личный опыт проведения собеседований по требованиям различных работодателей. Если вам есть что добавить, то жду вас в комментариях :)
Фреймворки:
- django (+ django-rest-framework)
- flask/fastapi (+ alembic, sqlalchemy)
Базы данных:
- redis
- postgresql
Основы:
- http-протокол, http-методы
- что такое CORS и как его победить
- linux/unix на уровне понимания работы по ssh
- понимание концепции MVC и принципа работы паттерна репозиторий (паттерн репозиторий больше нужен для работы с SQLAlchemy, потому что она не настолько удобна и полна как django orm, в django orm эту работу выполняют менеджеры моделей)
Что нужно знать в django:
- работа с django ORM: https://docs.djangoproject.com/en/4.0/topics/db/queries/
- менеджеры моделей: https://docs.djangoproject.com/en/4.0/topics/db/managers/
- формы: https://docs.djangoproject.com/en/4.0/ref/forms/ (опционально)
- сигналы: https://docs.djangoproject.com/en/4.0/topics/signals/ (на уровне концепции)
- admin actions: https://docs.djangoproject.com/en/4.0/ref/contrib/admin/actions/ (опционально)
- в целом работа с админкой: https://docs.djangoproject.com/en/4.0/ref/contrib/admin/ (на уровне концепции)
- отправка емейлов: https://docs.djangoproject.com/en/4.0/topics/email/ (опционально)
- сериализаторы, вьюшки и пермишены из drf: https://www.django-rest-framework.org/
- полезные библиотеки: https://github.com/adamchainz/django-cors-headers, https://djoser.readthedocs.io/en/latest/, https://django-constance.readthedocs.io/en/latest/, https://rsinger86.github.io/django-lifecycle/, https://django-jazzmin.readthedocs.io/
- важная проблема с админкой, о которой стоит знать: https://stackoverflow.com/questions/16755312/django-admin-change-form-load-quite-slow
Что нужно знать/уметь в flask/fastapi:
- работа с ORM SQLAlchemy: https://docs.sqlalchemy.org/en/14/intro.html
- работа с alembic: https://alembic.sqlalchemy.org/en/latest/
- работа с TortoiseORM (опционально): https://tortoise.github.io/index.html
- понимание async/await или работа с asyncio
Общие требования:
- работа с очередями задач с помощью Celery/RabbitMQ (на уровне перевода отправки емейлов в фоновом режиме и выполнения каких-то периодических задач)
Инструменты:
- git
- docker, docker-compose (на уровне: могу прочесть конфиг, могу запустить проект, могу написать свой простой конфиг)
- gunicorn/uvicorn (иметь представление о том что это и для чего используется)
- nginx (понимание на уровне директив location и upstream)
#django #python #backend
Сегодня по просьбе подруги составил список всех вещей, которые, на мой взгляд, позволят вам устроиться на работу на должность "Python Backend Developer". Это не то, что бы выжимка из вакансий, скорее, мой личный опыт проведения собеседований по требованиям различных работодателей. Если вам есть что добавить, то жду вас в комментариях :)
Фреймворки:
- django (+ django-rest-framework)
- flask/fastapi (+ alembic, sqlalchemy)
Базы данных:
- redis
- postgresql
Основы:
- http-протокол, http-методы
- что такое CORS и как его победить
- linux/unix на уровне понимания работы по ssh
- понимание концепции MVC и принципа работы паттерна репозиторий (паттерн репозиторий больше нужен для работы с SQLAlchemy, потому что она не настолько удобна и полна как django orm, в django orm эту работу выполняют менеджеры моделей)
Что нужно знать в django:
- работа с django ORM: https://docs.djangoproject.com/en/4.0/topics/db/queries/
- менеджеры моделей: https://docs.djangoproject.com/en/4.0/topics/db/managers/
- формы: https://docs.djangoproject.com/en/4.0/ref/forms/ (опционально)
- сигналы: https://docs.djangoproject.com/en/4.0/topics/signals/ (на уровне концепции)
- admin actions: https://docs.djangoproject.com/en/4.0/ref/contrib/admin/actions/ (опционально)
- в целом работа с админкой: https://docs.djangoproject.com/en/4.0/ref/contrib/admin/ (на уровне концепции)
- отправка емейлов: https://docs.djangoproject.com/en/4.0/topics/email/ (опционально)
- сериализаторы, вьюшки и пермишены из drf: https://www.django-rest-framework.org/
- полезные библиотеки: https://github.com/adamchainz/django-cors-headers, https://djoser.readthedocs.io/en/latest/, https://django-constance.readthedocs.io/en/latest/, https://rsinger86.github.io/django-lifecycle/, https://django-jazzmin.readthedocs.io/
- важная проблема с админкой, о которой стоит знать: https://stackoverflow.com/questions/16755312/django-admin-change-form-load-quite-slow
Что нужно знать/уметь в flask/fastapi:
- работа с ORM SQLAlchemy: https://docs.sqlalchemy.org/en/14/intro.html
- работа с alembic: https://alembic.sqlalchemy.org/en/latest/
- работа с TortoiseORM (опционально): https://tortoise.github.io/index.html
- понимание async/await или работа с asyncio
Общие требования:
- работа с очередями задач с помощью Celery/RabbitMQ (на уровне перевода отправки емейлов в фоновом режиме и выполнения каких-то периодических задач)
Инструменты:
- git
- docker, docker-compose (на уровне: могу прочесть конфиг, могу запустить проект, могу написать свой простой конфиг)
- gunicorn/uvicorn (иметь представление о том что это и для чего используется)
- nginx (понимание на уровне директив location и upstream)
👍11
Делаем авторизацию по номеру телефона или email в Django
#django #python #backend
Привет! Это пилотный выпуск моего мини-курсика по REST-авторизации с помощью Django. Сегодня разберём способы расширения пользовательской модели, напишем кастомный бэкенд для аутентификации, подключим djoser, настроим работу с его сигналами и даже отправим ссылку для подтверждения регистрации на пользовательский email.
Смотреть: https://youtu.be/r_eI5FLIPKw
Полезные ссылки:
Ролик про авторизацию и регистрацию: https://www.youtube.com/watch?v=q0u4yRUSDzI
Что нужно знать python backend developer для устройства на работу: https://t.me/davidobryakov/1140
Способы расширения кастомной модели пользователя: https://habr.com/ru/post/313764/
Документация djoser: https://djoser.readthedocs.io/
Исходный код из урока: https://github.com/kantegory/django-rest-auth-core/tree/lesson-1
#django #python #backend
Привет! Это пилотный выпуск моего мини-курсика по REST-авторизации с помощью Django. Сегодня разберём способы расширения пользовательской модели, напишем кастомный бэкенд для аутентификации, подключим djoser, настроим работу с его сигналами и даже отправим ссылку для подтверждения регистрации на пользовательский email.
Смотреть: https://youtu.be/r_eI5FLIPKw
Полезные ссылки:
Ролик про авторизацию и регистрацию: https://www.youtube.com/watch?v=q0u4yRUSDzI
Что нужно знать python backend developer для устройства на работу: https://t.me/davidobryakov/1140
Способы расширения кастомной модели пользователя: https://habr.com/ru/post/313764/
Документация djoser: https://djoser.readthedocs.io/
Исходный код из урока: https://github.com/kantegory/django-rest-auth-core/tree/lesson-1
👍10
Как не расстрелять свои ноги с Django, транзакциями и исключениями
#django #python #backend
Крутой информативный ролик от канала "Диджитализируй!" про транзакции и эксепншены в Django, рекомендую к просмотру. Здесь разбирают так же и работу со средним слоем (middleware), что делает ролик ещё более полезным.
Я на своей практике несколько раз сталкивался с проблемными транзакциями в Django, которые проходили, но частично, что ломало общую логику и каждый раз дебажить это — сущий ад, поэтому посмотрите, чтобы быть морально готовыми к подобным ситуациям в будущем :)
Сталкивались ли вы с подобными проблемами? Как решали? Делитесь в комментариях :)
Ссылка: https://www.youtube.com/watch?v=u2t1aLYu2QU
#django #python #backend
Крутой информативный ролик от канала "Диджитализируй!" про транзакции и эксепншены в Django, рекомендую к просмотру. Здесь разбирают так же и работу со средним слоем (middleware), что делает ролик ещё более полезным.
Я на своей практике несколько раз сталкивался с проблемными транзакциями в Django, которые проходили, но частично, что ломало общую логику и каждый раз дебажить это — сущий ад, поэтому посмотрите, чтобы быть морально готовыми к подобным ситуациям в будущем :)
Сталкивались ли вы с подобными проблемами? Как решали? Делитесь в комментариях :)
Ссылка: https://www.youtube.com/watch?v=u2t1aLYu2QU
YouTube
Как не расстрелять свои ноги с Django, транзакциями и исключениями
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me
Как не хапнуть проблем с Django, транзакциями и исключениями? Рассказываю…
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram: https://t0digital.t.me
Как не хапнуть проблем с Django, транзакциями и исключениями? Рассказываю…
👍4
#python
На канале «Диджитализируй!» вышло видео про релиз Python 3.11
Собрал для вас краткую выжимку по обновлению.
Улучшения по оптимизации:
- ⚡️ скорость работы увеличилась на 25% в реализации CPython
- 👩💻 адаптивная оптимизация байт-кода
Улучшения по DX (developer experience):
- 📝 улучшенный traceback
- ✍️ заметки для исключений
- 🔢 группировка исключений и асинхронных задач
-
- 📁 добавлена библиотека для работы с TOML-файлами
***
🔗 Полезные ссылки:
Официальные release notes: https://docs.python.org/3.11/whatsnew/3.11.html
Видео с канала «Диджитализируй!»: https://www.youtube.com/watch?v=hF_hul5k07A
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
⚡Python 3.11 — СКОРОСТНОЙ горячий пирожочек!
Смотрим, что нового-бодрого-прекрасного завезли в релизе Python 3.11, вышедшем вчера!
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram — https://t.me/t0digital…
Мой курс «Хардкорная веб-разработка» — https://course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: https://botanim.to.digital/
Telegram — https://t.me/t0digital…
👍6❤🔥3
#python #типизация
Листая хабр на предмет интересных статеек наткнулся на текст про протоколы в python. Эта заметка в меру корявенькая и некоторые вопросы рассматривает не совсем верно (а какие-то нюансы и вовсе не затрагивает), но спасибо ей, что побудила меня сесть и поразбираться в том, как это работает в действительности. Более удачная статейка с хабра по теме, если кому интересно.
Я разобрался в том, как работают протоколы и постарался сделать краткую выжимку из спецификации, обратив внимание на самые важные моменты (на мой взгляд, конечно).
📖 Читать на Teletype: https://blog.kantegory.me/python-protocols
Please open Telegram to view this post
VIEW IN TELEGRAM
Teletype
Протоколы в python
Листая хабр на предмет интересных статеек наткнулся на текст про протоколы в python. Эта заметка в меру корявенькая и некоторые вопросы...
👍7🔥2❤1
Практические советы для начинающих django-разработчиков
#django #python #backend
Около месяца назад стартовали новый проект на Django и так вышло, что на нём работают Junior+ и Intern в паре. Причём, все последние проекты Junior+ разработчика были на FastAPI, из-за чего Django он подзабыл. По мере разработки я собирал в заметках все советы, которые давал разработчикам на проекте.
Я решил собрать их все в одной статье, дополнив важными особенностями (там есть информация про docker, .env, settings и даже ссылка на наш шаблон). Вот наиболее полезные советы для новичков (на мой взгляд):
1) когда вы делаете поле
2) если вы напишите человекочитаемый
3) при написании представлений в Django старайтесь в названии представления отражать то, к чему оно действительно относится, также используйте нормальную форму, к примеру не
4) старайтесь держать нейминг приложений согласованным, например, если вы назвали какое-то приложение в множественном числе, в то время, как все остальные названы в единственном числе, - это будет выглядеть неаккуратно;
5) если вы используете choices, вам следует завести их ключи свойствами класса модели, либо вынести их в отдельный класс, чтобы обращаться к константе, а не указывать конкретное значение.
#django #python #backend
Около месяца назад стартовали новый проект на Django и так вышло, что на нём работают Junior+ и Intern в паре. Причём, все последние проекты Junior+ разработчика были на FastAPI, из-за чего Django он подзабыл. По мере разработки я собирал в заметках все советы, которые давал разработчикам на проекте.
Я решил собрать их все в одной статье, дополнив важными особенностями (там есть информация про docker, .env, settings и даже ссылка на наш шаблон). Вот наиболее полезные советы для новичков (на мой взгляд):
1) когда вы делаете поле
ForeignKey
, не называйте его model_name_id
, лучше просто model_name
, поскольку model_name_id
в случае FK резервируется ORM под возможность получать именно id, а не инстанс модели целиком, что позволяет избежать лишних запросов к БД;2) если вы напишите человекочитаемый
verbose_name
у всех полей для каждой модели - это сильно облегчит пользование админкой Django;3) при написании представлений в Django старайтесь в названии представления отражать то, к чему оно действительно относится, также используйте нормальную форму, к примеру не
DetailedModelName
, а ModelNameDetailView
;4) старайтесь держать нейминг приложений согласованным, например, если вы назвали какое-то приложение в множественном числе, в то время, как все остальные названы в единственном числе, - это будет выглядеть неаккуратно;
5) если вы используете choices, вам следует завести их ключи свойствами класса модели, либо вынести их в отдельный класс, чтобы обращаться к константе, а не указывать конкретное значение.
Teletype
Практические советы для начинающих django-разработчиков
# Практические советы для начинающих django-разработчиков
🔥8❤🔥1
#docker #python
Именно такую фразу мне сказал старший товарищ при одной из бесед, но тогда я его не понял. Был ли он прав? Разбираемся с примерами.
Спустя несколько лет работы с docker, я пришёл к выводу, что не имеет смысла выбирать между pipenv, poetry или conda, поскольку их использование внутри docker является затруднительным и требует плодить костыли, вместо того чтобы просто установить зависимости через pip.
Основная проблема заключается в том, что внутри контейнера вам никакое виртуальное окружение не нужно, а значит - мы затягиваем лишнюю зависимость, которая увеличит время сборки, зато локальная разработка без докера становится удобнее и приятнее. Только я, хоть убей, не пойму - какой смысл разрабатывать локально приложения на python без докера. Пожалуй, есть только один небольшой минус - нужно вписать новую зависимость в requirements.txt вручную. Но и этого можно избежать, если вы просто зайдёте в терминал контейнера, установите зависимость там и сделаете pip freeze в нужный файлик (разумеется, при условии, что зависимости попадают в volume с приложением).
Полная версия у меня в блоге.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2❤🔥1
#python #django #backend
Сегодня хочу рассказать про методы
select_related
и prefetch_related
: показать разницу между ними, привести примеры использования. Полная версия с примерами доступна у меня в блоге.В чём разница?
Если говорить совсем кратко, то:
select_related
— это JOIN
, то есть происходит 1 запрос, в рамках которого связываются указанные сущности и приходят в python уже связанными, в то время, как prefetch_related
— делает отдельные запросы по каждой указанной связанной сущности и производит связывание на уровне python. В документации django сказано, что
select_related
стоит применять в тех случаях, когда вы используете ForeignKey
, если вы используете ManyToManyField
, ваш выбор — это prefetch_related
.Подробности и подводные камни
Предположим, что наши модели выглядят следующим образом:
from django.db import models
class Genre(models.Model):
name = models.CharField(max_length=512)
class City(models.Model):
...
class Person(models.Model):
hometown = models.ForeignKey(
City,
)
class Book(models.Model):
name = models.CharField(max_length=512)
author = models.ForeignKey(Person, on_delete=models.CASCADE)
genres = models.ManyToManyField(Genre)
Инвалидация кэша
⚠️ При использовании
prefetch_related
, важно помнить о такой вещи, как инвалидация кэша на уровне Queryset
(инвалидация может быть вызвана любым дополнительным методом в цепочке, который подразумевает другой запрос к базе данных). Например, при использовании фильтрации в следующем примере, будут выполнены отдельные запросы для каждого объекта Book
:for book in Book.objects.prefetch_related("genres"):
print(book.name, ":")
for genre in Book.genres.filter(age_rating="18+"):
print(" ", genre.name)
Объект Prefetch
Также, стоит упомянуть и о существовании объекта
Prefetch
, который позволяет использовать подготовленный Queryset
вместе с prefetch_related
. Например, мы хотим отобрать заранее только те жанры, которые имеют возрастной рейтинг "18+" и посчитать количество книг по каждому такому жанру.Код для решения этой задачи выглядит следующим образом:
genres = Genre.objects.filter(age_rating="18+")
.annotate(books_count=Count("book_set"))
queryset = Book.objects.all().prefetch_related(
Prefetch("genres", queryset=genres)
)
Полная версия с примерами доступна у меня в блоге.
📖 Источники:
1) Статья с хабра, в которой всё доходчиво объясняют: https://habr.com/ru/articles/752574/
2) Документация Django: https://docs.djangoproject.com/en/5.0/ref/models/querysets/
Please open Telegram to view this post
VIEW IN TELEGRAM
Teletype
Оптимизация запросов в Django ORM
Сегодня хочу рассказать про методы select_related и prefetch_related: показать разницу между ними, привести примеры использования.
👍7
#python #backend
Полная версия с разбором решения доступна у меня в блоге.
Сегодня на работе столкнулся с задачей, когда надо было посчитать дату оплаты счёта, с учётом праздников и выходных (чтобы выводилась дата по условию "не позднее, чем через 5 рабочих дней"). Ранее подобных вещей я не делал, поэтому пошёл гуглить.
Ищем готовое решение на python
На этапе ресёрча по задаче нашёл такое решение:
import datetime
import numpy as np
start = datetime.date(2022, 2, 15)
end = datetime.date(2022, 3, 16)
# include holidays in a list
days = np.busday_count(start, end, holidays=['2022-02-21'])
print('Number of business days is:', days)
На том же сайте было упоминание библиотеки holidays, чтобы проставить сразу корректный список всех праздников, относительно определённой страны. Принцип работы простой:
from datetime import date
import holidays
ru_holidays = holidays.RU()
date(2024, 3, 8) in ru_holidays # True
date(2024, 3, 7) in ru_holidays # False
К сожалению, нельзя сказать, что это решение покрывает все кейсы. К примеру, в 2024м году майские праздники в России по производственному календарю продлятся с 9 по 12 мая. Библиотека же, считает не так:
>>> date(2024, 5, 9) in ru_holidays
True
>>> date(2024, 5, 10) in ru_holidays
False
В этом примере, 9 мая ещё входит в список праздников, а вот 10 мая уже нет. Возможно, что numpy будет определять корректно?
>>> import datetime
>>> import numpy as np
>>> start = datetime.date(2024, 5, 6)
>>> end = datetime.date(2024, 5, 12)
>>> days = np.busday_count(start, end)
>>> days
5
Как видим, без параметра
holidays
, numpy считает, что вся неделя с 6 по 12 рабочая, кроме 2 выходных.Ищем открытое API
Следующее, на что я наткнулся, было открытое API производственного календаря для России и Казахстана. Работа с ним максимально простая. К примеру, чтобы получить список всех "отклонений" от обычного календаря для России, достаточно выполнить GET-запрос по адресу: https://production-calendar.ru/get/ru/2024/json?compact=1. Результат полностью совпадает с производственным календарём на сайте КонсультантПлюс.
Мастерим решение
С учётом всех вводных реализуем решение (полная версия с его разбором у меня в блоге):
import datetime
import numpy as np
# глобальные константы откуда-то из settings/django constance
HOLIDAYS = ['2024-03-08', ...]
BUSINESS_DAYS_DELTA = 5
def found_business_days_date(step = 5, _start_date = None):
start_date = _start_date or datetime.datetime.now().date()
end_date = start_date + datetime.timedelta(days=step)
days = np.busday_count(start_date, end_date, holidays=HOLIDAYS)
if days == BUSINESS_DAYS_DELTA:
return end_date
return found_business_days_date(step + 1, start_date)
Результат работы этой функции для сегодняшней даты (04.03.2024): 2024-03-12. Соответственно, функция работает корректно.
Заключение
Решение подобных базовых задач очень позитивно складывается на опыте начинающих и продолжающих разработчиков.
Полная версия с разбором решения доступна у меня в блоге.
💬 Поделитесь, сталкивались ли вы с подобными задачами? Какое решение в итоге находили?
Please open Telegram to view this post
VIEW IN TELEGRAM
Teletype
Вычисляем дату с учётом рабочих дней на python
Сегодня на работе столкнулся с задачей, когда надо было посчитать дату оплаты счёта, с учётом праздников и выходных (чтобы выводилась...
👍5❤2🔥1
#django #python #backend #fastapi
Пару лет назад я уже писал подобный пост. Тогда он был основан на моём личном опыте в найме (текущий, в общем-то тоже), пришло время актуализировать список. Если считаете, что я что-то упустил, то жду ваших предложений в комментариях.
- Django (+ DRF),
- FastAPI/Flask (+ alembic, sqlalchemy).
- redis,
- postgresql.
- HTTP-протокол, HTTP-методы,
- что такое REST, REST API, RESTful,
- что такое CORS и как его победить,
- linux/unix на уровне понимания работы по SSH, права доступа,
- понимание концепции MVC и принципа работы паттерна репозиторий (больше нужен для работы с SQLAlchemy),
- вопросы для подготовки к интервью (список там довольно большой, обращайте внимание на те моменты, по которым вы совсем ничего не знаете).
Обязательно:
- работа с 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/.
Полезные библиотеки и ссылки для 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.
- работа с 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.
- не поместилось по лимиту в ТГ, читайте полную версию поста в блоге.
Общие требования:
- работа с очередями задач с помощью Celery + Redis/Celery + RabbitMQ (выполнение периодических или отложенных задач, например, отправка электронной почты);
- настройка общения между сервисами посредством RabbitMQ
- git (тренажёр: https://learngitbranching.js.org/?locale=ru_RU),
- docker, docker compose (на уровне: могу прочесть конфиг, могу запустить проект, могу написать свой простой конфиг),
- gunicorn/uvicorn (иметь представление о том что это и для чего используется),
- nginx (понимание на уровне директив location и upstream).
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤3❤🔥1