Базовое приложение на FastAPI | Каркас проекта FastAPI + SQLAlchemy (ascynio) + alembic
HTML-код
- Опубликовано: 19 июн 2024
- Рассказываю и показываю как начать работать с FastAPI, как выстроить проект, настроить работу с базой данных, миграции.
Вам это всё делать не обязательно, потому что код доступен:
github.com/mahenzon/FastAPI-b...
Поддержать выход роликов (зарплата монтажеру)
- на Boosty boosty.to/mahenzon
- на Sponsr sponsr.ru/suren/
- через Tinkoff (любые карты) tinkoff.ru/cf/6kbKWtKhapM
- через CloudTips pay.cloudtips.ru/p/9a8fa641
Ссылки на соцсети:
- Канал в ТГ t.me/Khorenyan - тут в чате обсуждаем технологии и ваш код
- Паблик в ВК SurenKhorenyan
- Дискорд / discord
- RUclips: / @surenkhorenyan
- Второй канал на RUclips: / @surenlife
- RuTube rutube.ru/u/Suren/
- Все ссылки taplink.cc/mahenzon
Метки:
00:00 О чем видео
01:05 Старт проекта: установка зависимостей и git векрсионирование
06:55 Почему я складываю внутрь папки приложения
09:07 Приложение на FastAPI
10:06 Запуск через PyCharm
12:12 Первый роутер
14:03 Базовая конфигурация
20:14 Подготовка к работе с СУБД Postgres через SQLAlchemy (asyncio)
39:20 Цикл жизни приложения
42:45 Переменные окружения в env файле
52:31 Базовая модель SQLAlchemy
57:53 Как создать модель и таблицу в БД
01:01:10 Настройка alembic для асинхронной алхимии
01:06:06 Автогенерация миграций
01:07:48 SQLA MetaData naming conventions
01:17:35 Настройка роутеров API Router и префиксов
01:20:54 Схемы pydantic
01:22:54 Взаимодействие API views с БД
01:29:05 Создание объекта
01:33:25 Доступно на GitHub
01:33:53 Ускорение работы с JSON
01:36:35 SQLA id mixin
01:38:22 keep folder
01:39:01 Как использовать репо
01:40:42 Итоги - Наука
Теперь я усваиваю на 200% лучше. Синхронизация произошла!!! Такая подача - спокойный обычный разговор - the best! Спасибо, что учитываешь пожелания и рекомендации подписчиков.
Кайф! Рад, что вы оценили! Супер, буду продолжать совершенствоваться 🥰
на скорости 2х вообще будет 400%😂
Хааа 😅
Огромное спасибо, круто! Всё понятно, ёмко и по делу
Класс, пожалуйста! Рад 😊
Вот это кайф! Спасибо огромное!🙏
Пожалуйста! Рад, что понравилось
Сурен, спасибо большое за труды!
Пожалуйста! Рад, что вы оценили
Огромное спасибо за работу!!!!
Пожалуйста! Очень приятно 🥰
Сурен, доброго времени суток, надеюсь это не последнее видео про FastAPI)
Здравствуйте! Точно не последнее
Очень нравится контент твоего канала. Спасибо!
Крутяк, я рад! Пожалуйста!
Отличное видео! Спасибо, Сурен!
Пожалуйста! Рад, что вам понравилось!
Сурен, как всегда на высоте! Спасибо за проделанную работу!
Кайф, пожалуйста!
У тебя лучший курс по фаст апи на Ютубе. Сразу видно, что ты не просто прочитал документацию по фаст апи и записал курс, как минимум по тому, что ты знаешь, что f строка быстрее str(). Если было бы поменьше воды, то курс был бы идеален
Без воды он был бы сухим)
Сурен чёткий!
Спасибо! Хаа, а что вы относите к "воде"?
Спасибо!
@@SurenKhorenyan что-то помимо кода, которое является "лирическим отступлением"
Вообще её у Вас(тебя) мало! Вполне сжато и по-делу
@@AHTOH_IO а сваггер это тоже отступление? Там кода нет 😁
Спасибо! Именно это сейчас мне нужно))
Огонь! Пожалуйста!
Отличное видео, спасибо за контент!
Пожалуйста! Рад, что понравилось 😊
У тебя прекрасные видео, как вводные. В свое время меня очень испугала документация алхимии, а сейчас стал вопрос как строить бэкенд, который и на МЛ завязан, и вот все внимание сейчас ушло к пайтону, который я просто забросил.
Вот отличные вводные, чтобы что-то попробовать с тобой собрать, получить базовую ментальную карту и дальше двигаться
Видосы у тебя мего огромные, это большая работа в такой Ютьюб опенсорс, спасибо!
Крутяк, пожалуйста! Спасибо огромное! Очень приятно 🥰
Вот этот видеоурок больше похож на основу frameworka Fast api чем предыдущие. Спасибо за труд и уделения времени
Пожалуйста!
Отлично, сжато, без воды и все самое главное. Еще бы добавить сюда асинхронные тесты. Ну и можно линтеры (ну и black -> ruff)
Спасибо! Согласен, только в такой ролик пока не влезает 😁
Лучший! 😁
Крутяк, спасибо!
Круто❤
Класс, спасибо!
Сурен, очень хотелось бы увидеть от тебя что-то подобное, но с реализацией архитектурного паттерна DDD, например.
Привет. В ближайшее время не планирую. Можете заказать тему через подписку с уровнем Профессионал на бусти. Но там уже очередь на июнь, так что даже если сейчас оформите, будет не раньше июля или даже августа.
сразу бросается в глаза что нет типовых «ээ» «аа», складная речь, респект
Кайф! Очень приятно, что вы заметили 🥰
Теперь ждём ролик по litestar)
Ох, возможно. Но это пока не точно
спасибо за материал !
Вы используете copilot в своей ide ?
Пожалуйста!
Нет, не использую. Подсказки встроенные в PyCharm (оффлайн автокомплит)
спс
Пжл!
Спасибо за видео, оч полезно. Ты сказал на 46:17 про монорепозиторий, и .env для каждого микросервиса в своем каталоге. А если 2 микросервиса и больше, как считаешь, какая бест практика по установке пакетов для каждого микросервиса? Переходить на pip requir*.txt для каждого микросервиса или в pyproject делать группы или extra для каждого микросервиса или что-то иное?
Смотря как сильно будут разделены ваши микросервисы. Можно для каждого проекта сделать свой отдельный конфиг для зависимостей, угу
Привет, Сурен
Знаком с тобой больше года почти!)
Благодаря твоим видео уловил принципы Django и далее нашел самостоятельно пути развития и устроился Джуном)
Сейчас уж больно понравилось расширение для пуша в гит с одного файла, но с выбором изменений, не подскажешь есть ли такое же расширение для vs code?
Привет. Круто!
Вы большой молодец.
Вы про какое расширение? В PyCharm и в VS Code встроенная работа с git. Я через него и работаю. Нет опции выбрать, какие изменения пушить. Если вы про переписывание истории, то я это сделал за кадром, чтобы не грузить зрителей
@@SurenKhorenyan Нет, я про возможность не сразу пушить весь файл в гит, а выбирать строки кода через плюсик для пуша
@@SurenKhorenyan Спасибо большое!)
Продолжайте вести ваш канал, у вас здорово получается!)
Для пуша или для коммита? Для коммита просто кликаю напротив строк
Пожалуйста!
Спасибо за видео. А как называется эта архитектура? Вообще какая архитектура лучше для fastapi? Что насчет clean архитектуры?
Пожалуйста! Без понятия как называется 😅
Лучше та, с которой вам удобно работать 🙂
Привет, спасибо за видео!
Такой вопрос: Как правильно рассчитать poll_size для engine? И max_connections для postgres?
Привет, пожалуйста!
Ставьте как показал в видео и не парьтесь. Реальные значения надо получать опытным путём на конкретном проекте: давать нагрузку и смотреть, что и как происходит
Какие средние значения у ваших проектах?
@@popcorn_833 я показал как раз те, что обычно использую: 50 и 10 оверфлоу
@@SurenKhorenyanСпасибо!
@@popcorn_833 пожалуйста!
не получается создать конфиг с подмоделью у которой в наименовании api - это глюк pydantic-settings. помогает только переименование.
Ого! А покажите? У меня в примере работает же.. можете в чат в телеграм закинуть пример кода?
Было бы еще лучьше, если еще по SQL-alchemy и pydantic дали бы бозовые понятия
По алхимии в этом же плейлисте есть несколько видео
Все хочется выучить и начать пользоваться FastAPI, но как же сильно отпугивает эта вся ручная настройка alembic/sqlalchemy... Как же все удобно и для людей сделано в джанго...
Да, в Джанго очень удобно и легко, особенно поначалу. Вот для фастапи можете взять код из видео (ссылка на репозиторий в описании), и дальше делать всё что вам нужно
1:22:43 - Сурен, а как же дзен Python? "Явное лучше чем не явное"😊
А в чём противоречие? Если речь про from_attributes, я рассказываю как раньше было. Для тех, кто понимает боль, показанный пример актуален. Остальным по барабану, и можно не писать лишний код. Или вы про что-то другое?
Очень смущает использование глобальной переменной settings
Если вас смущает, можете просто в каждом модуле, где нужно взять настойки, инициализировать экземпляр настроек заново. Только зачем? Что вы так сэкономите, какую проблему решите? Лишняя работа и только
@@SurenKhorenyan Привет спасибо за труд! а если создать функцию get_settings() под декоратором lru_cache? Я не в коем случае не хочу умничать)) Просто порой бывает сложно понять как лучше сделать(видел множство примеров и часто люди делают по разному), без функции выглядит лаконичнее))
@@user-mq3pj2om8u так можно сделать (технически да, я такое даже встречал в продакшне). Только зачем? А итоге всё равно будет один и тот же экземпляр, только его ещё и получать нужно будет через функцию, а не через готовую переменную. Лишняя работа, которая ничему не помогает