УРОКИ FASTAPI НА БОЕВОМ СЕРВИСЕ 1. MVP, СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ, МИГРАЦИИ ALEMBIC + ASYNC SQLALCHEMY
Начинаем делать боевой проект на FastAPI с использованием асинхронного SQLAlchemy. В ролике накатим миграции через Alembic и напишем простой эндпойнт для создания пользователя в базе данных.
Поддержать:
www.donationalerts.com/r/luch...
boosty.to/luchanos
На других платформах:
/ luchanos
/ @luchanos
Канал «luchanos | Balabol IT» в Телеге - t.me/balabol_it
Присоединяйся к нашему чату в Телеге - t.me/luchanos_live_chat
Я в linkedin - www.linkedin.com/in/luchanos
Страница компании - / luchanos
Репозиторий-сокровищница - github.com/luchanos/treasury
00:00 Введение
01:11 Коротко про FastAPI, его место в работе клиент-серверной архитектуры
06:38 Что и как будем пилить? Обзор MVP проекта образовательной платформы
15:03 Обзор docker-compose файла для создания базы в контейнере
18:50 Основной файл проекта
20:10 Обзор файла с зависимостями
21:12 Обзор файла с настройками и конфигами
23:18 Блок для взаимодействия с базой данных
25:10 Блок с моделями для базы данных
27:55 Блок с бизнес-логикой взаимодействия с базой
31:40 Блок с моделями API
37:53 Блок с созданием приложения, хэндлеров и привязкой путей
47:35 Накатываем миграции через Alembic
52:11 Финальный результат
53:15 Заключение
#ityoutubers #ityoutubersru
Пікірлер: 106
Актуальный хэш коммита для видео ветки main - d51c3625c5d3ebc21eeb5377c36cbff751739329 Репозиторий - github.com/luchanos/luchanos_oxford_university
@stvJnK
Жыл бұрын
Удобнее когда ссылка в описании к ролику. Спасибо за видео урок!
@azamtoiri
Жыл бұрын
Еще удобнее когда комментарий закреплен, Спасибо!
@luchanos
Жыл бұрын
@@azamtoiri мискузи, поправил
@user-dg4rg3rk7k
Жыл бұрын
@@luchanos а продолжение когда будет?
Очень круто, что код к каждому ролику можно посмотреть. Обычно либо нет кода вообще, и все по роликам переписываешь, либо есть конечный код всего, в котором без сто грамм не разберёшься. Огромный респект за такой практический курс.
Ну и молодец!!! Все четко и по существу, не прыгая по экранам. Огромное благодарю !
1. Почему бы сразу не пропагандировать не приучать зрителей к ведению норм зависимостей посредством poetry? 2. У пайдантика есть модельки для сетингов, которые берут из енвов все указанные переменные: удобно, красиво, с моей точки зрения правильно 3. У session_maker надо выключить auto_commit и auto_flush 4. Зачем задавать в конфиге модельки orm_mode = True, если потом все равно руками передаешь все поля? SomeModel.from_orm(orm_data) или parse_obj_as(SomeModel, orm_data) 5. Отсутсвие коммита перед закрытием сессии, хотя по-сути авто коммит свое дело должен будет сделать, но его все вырубают для большего контроля со стороны пользователя, а не фреймворка 6. Но это для новичков будет тяжко, заюзать dependency injector, который все зависимости классов возьмет на себя, что в дальнейшем позволит упростить жизнь 7. Я бы еще в таблицу юзера добавил поле created_at и может еще last_login, раз уж есть is_actice. А так в целом задел неплохой
@jcatstreams8550
11 ай бұрын
4 пункт деприкейтет
Огонь! параллельно учусь всему и сразу на питоне)))) спасибо за практику, можно играться и вникать как работает 👍👍👍👍👍
Отличное видео, лайк, подписка. Продолжаю смотреть уроки по FastApi
Крутой видос! Всё очень доступно и понятно изложено!
огромное спасибо за детальное описание как все работает под капотом ))))
Очень круто подаете информацию! Спасибо! Подписка и лайк)
Отличная подача материала - постепенное введение в тему и подробное объяснение 👍
Спасибо огромное за качественный контент, очень подробно!
годно, честно, очень круто подал материал посмотрел на одном дыхании
Благодарю за знания! Успехов и развития 😊
"передаем параметр созвучный с тем полем которое мы хотим провалидировать" красиво сказано
Офигенно!, пару интересных идей подчерпнул спасибо большое!
спасибо, полезный урок
Нифига себе, мне тут надо тестовое сделать, думаю, у лухантоса точно есть что то по этой теме, смотрю - то что надо! и выложил 21 час назад)) как знал
выглядит мнрогообещающе=) качетвенный контент, спасибо большое
Спасибо за контент! Продуктивные 50 мин👍
Переменные окружения можно парсить с помощью BaseSettings из пайдентика
Отличный видеоролик , пожалуйста продолжайте
можно сделать регионы вместо блоков. Попытаюсь объяснить, в начале объявляешь #region: Name of region и в конце #endregion. Думаю что так будет красивее, но делай как удобнее )
Спасибо, Николай!!!! Не останавливайся!!!!
Хороший ролик, спасибо!
В Alembic для асинхронных миграций и автогенерации можно было запустить alembic init -t async
@luchnos отличное начало! вот не понял почему в классе Юзер где создается таблица все типы просто указаны а boolean вызывается с помощью круглых скобок?
Очень классно вышло)
один раз пробовал фастапи, сделал крад постов с картинками, авторизацией, всё думал довести до ума и не большой фронт симвалический накатить на реакте, как раз видос для освежения в памяти)
Сразу лайкос
спасибо большое!
Круто-круто 👍
Круто ждём продолжение
Hi there, With pleasure waiting ur English contents. I can help u 👍🏻🤝
А на бусти есть реализация внутреннего чата для проекта на фастапи? Хочу проект сделать, но нужно чтобы пользователи могли переписываться друг с другом. Функционал чата минимальный, по типу внутреннего чата на авито.
офигенно!
Спасибо, отличное начало чего-то большого и интересного! Очень интересно будет услышать про реализацию аутентификации/авторизации и системы ролей. Собираешься для этих целей использовать готовые решения что-то вроде fastapi-users или писать свои велосипеды?) Планируется ли фронт для этого проекта, если да, то с использованием какого стека?
@luchanos
Жыл бұрын
фронт планирую, но пока не решил ещё в каком виде) мне потребуется помощь коллег для этого) что касается авторизации, то буду делать через JWT с использованием готовых решений) Чуть позже вы все увидите ;)
Для ubuntu команда сборки docker-compose будет через пробел. docker compose
Лайк не глядя
а не удобнее ли будет брать сессию через Depends(from fastapi) и прокидывать в нее функцию(она есть в доках fastapi) который нам выкидывает yield сессии, а потом ее коммитит(в данном случае flush) чтоб не писать постоянно эти страшные with. Или это в асинхронном не работает? я просто не пробовал еще работать с асинхронной алхимией
@luchanos
Жыл бұрын
для меня это тоже первый опыт) во втором ролике я как раз depends добавил)
@stvJnK
Жыл бұрын
Или использовать декораторы запуска и остановки приложения.
У Вас талант в создании презентаций
Топчик!
Нет статьи в описании, на базе которой сделан урок)
спасибо тебе большое, купил курс, который оказался в разы хуже твоего бесплатного. Благо нашел тебя )
Предлагаю использовать fastapi-utils для создания class handler
А где ссылки на статьи на хабре?
Что нужно предварительно сделать(либо установить), чтобы команда "% docker-compose -f docker-compose.yaml ud -d" выполнилась? Если это где-то на канале раньше рассматривалось, то скиньте ссылку на видео, пожалуйста.
@user-qp6ru1tc4t
5 ай бұрын
установить docker
👍
Хорошо объясняет автор, но смотрел на скорости х1,5
Будет ли проект соответствовать структуре описанной в репозитории fastapi best practices?
@David-yj5kv
Жыл бұрын
слышал мнение, что там не оч хорошая архитектура
@user-ts6wk3mu2l
Жыл бұрын
@@David-yj5kv кажется, дело вкуса. Но субъективно для меня, архитектура указанная там более понятна
@vladvlad3544
10 ай бұрын
Мне тоже кажется, что структура из best practices (аля Django) лучше. По крайней мере, лучше читаемая, как мне кажется.
А почему AQLAlchemy а не Ormar? Сам в этом не разбираюсь, просто слышал, что в обычной ОРМ есть модели и в пайдантик тоже, а в Ormar они объединены и, соответсвенно, кода для поддержки получается меньше в два раза.
@forsee2328
Жыл бұрын
для современного Pydantic есть SQLModel, которая является надстройкой над алхимией и BaseModel
@Fartek2
Жыл бұрын
@@forsee2328 что Ормар, что SQLModel накладывают ненужные ограничения и создают лишнею абстракция, я бы не рекомендовал к использованию
@forsee2328
Жыл бұрын
@@Fartek2 Сам pydantic накладывает большое количество ограничений, зачастую для обработки данных модели приходится конвертировать в датаклассы или что нибудь такое. Очень сложно заставить некоторые механизмы языка работать с pydantic моделью, потому что, например, он переопределяет __setattr__, однако свою задачу эти модели выполняют идеально. Если у тебя нет комплексной логики, и все, что тебе нужно - например получить данные с эндпоинта, провалидировать и положить в бд - SQLModel будет отличным решением
@stvJnK
Жыл бұрын
Пробовал Ormar вроде надстройка на алхимией и был хорошей альтернативой пока алхимия не умела асинхронно работать, минус продукт свежий и было несколько раз после обновления приходилось почти все переписывать, в этом плане алхимия не значительно меняется.
А что за туториал про фреймворк с нуля? Можно ссылку плиз?
sessionmaker необходимо заменить на async_sessionmaker
А веб на чем будет?
Для чего сейчас используют FastAPI, чаще для создания API или же можно и обычные веб-приложения с templates(html,css,js)?
@artem1736
Жыл бұрын
для создания API, но можно прикрутить и шаблоны с jinja
@user-cr5zz6yp2t
Жыл бұрын
@@artem1736 да, я видел. Но на сколько это эффективно так делать? Есть ли вообще смысл делать приложения с фронтом на fastapi?
@artem1736
Жыл бұрын
@@user-cr5zz6yp2t ну лично мне кажется, что в таком случае логичнее использовать Фласк/Джанго
@MrLotrus
Жыл бұрын
@@user-cr5zz6yp2t Мы же не знаем какое приложение вы хотите сделать. Если что-то современное и хоть сколько-нибудь сложное и кастомизируемое, лучше сразу делать как сейчас принято - отдельно апи и отдельно фронт на JS фреймворке.
@user-cr5zz6yp2t
Жыл бұрын
@@MrLotrus я хотел узнать, стоит ли тратить время на этот Фреймворк, если планируешь делать веб-приложения с фронтом, а не только API.
почти ничего не понял но очень интересно
Начал смотреть, сразу резануло глаз: импорты не по PEP в пайчарме можно просто нажать ctrl+alt+o PS зашел в репу там щас все ок с этим :)
Почему sessionmaker, а не async_sessionmaker?
это лучшее из того что есть на русском
А зачем 2 драйвера asyncpg и psycopg2? Или алембик только с psycopg2 работать умеет?
@vladvlad3544
10 ай бұрын
Нет, алембик через asyncpg тоже работает
+
Увидел импорты и уже плохо стало, что по PEP8?
@luchanos
Жыл бұрын
Не переживай, линтеры прикрутим
и непонятно почему в dbeaver порт localhost, если я ставлю такой порт то выходит ошибка, что неверный пароль
@user-nu9oy4tf1o
4 ай бұрын
ты решил эту проблемку? у меня такой же вопрос.....
@kanamagg
3 ай бұрын
@@user-nu9oy4tf1o, Привет! Как-то решилось, уже не помню как, я все удалял, ставил заново. Но в следующих видео тоже что-то не шло и я уже сейчас больше просто смотрю и не прогаю)
А где видео про свой фреймворк с нуля? Не вижу в Вашем канале? На бусти?
@luchanos
Жыл бұрын
так вот же)) kzread.info/dash/bejne/c4x3qsmYg5SwgLw.html
А UserDAL можно назвать репозиторием?
@user-ih8vs8xw2c
Жыл бұрын
это класс
@h3ckphy246
Жыл бұрын
@@user-ih8vs8xw2c я имел в виду это типо паттерн репозиторий?
FastAPI умеет энвы из коробки читать. Зачем envparse?
А почему не воспользоваться библиотекой fastapi-users?
@luchanos
Жыл бұрын
потому что я про неё впервые слышу)) спасибо!)
@dmitriynekrasov3098
Жыл бұрын
@@luchanos пожалуйста. Просто там из коробки уже все эндпоинты, сессии, куки, jwt и прочее. Меньше велосипедов будет :)
@oleksandr7201
9 ай бұрын
Библиотека fastapi-users еще сырая: не предусмотрены refresh токены, нет подтверждения e-mail, ... Это все нужно будет допиливать самостоятельно
Почему так мало лайков
Ужасно неприятно ставить psycopg2 (в т.ч. binary-версию) из-за вечных проблем с установкой
Во второй версии pydantic декоратор @validator переименовали в @field_validator, а orm_mode - в from_attributes, если у кого-то будут какие-то проблемы с этим.
@user-eb2nz5nx1g
7 ай бұрын
..\venv\Lib\site-packages\pydantic\_internal\_config.py:318: UserWarning: Valid config keys have changed in V2: * 'orm_mode' has been renamed to 'from_attributes' warnings.warn(message, UserWarning) Как решить эту проблему?
@PlagueisMKII
7 ай бұрын
@@user-eb2nz5nx1g схему в студию.