УРОКИ FASTAPI НА БОЕВОМ СЕРВИСЕ 1. MVP, СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ, МИГРАЦИИ ALEMBIC + ASYNC SQLALCHEMY
ฝัง
- เผยแพร่เมื่อ 25 เม.ย. 2024
- Начинаем делать боевой проект на 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
Актуальный хэш коммита для видео ветки main - d51c3625c5d3ebc21eeb5377c36cbff751739329
Репозиторий - github.com/luchanos/luchanos_oxford_university
Удобнее когда ссылка в описании к ролику. Спасибо за видео урок!
Еще удобнее когда комментарий закреплен, Спасибо!
@@azamtoiri мискузи, поправил
@@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.
А так в целом задел неплохой
4 пункт деприкейтет
Ну и молодец!!! Все четко и по существу, не прыгая по экранам. Огромное благодарю !
Благодарю за знания! Успехов и развития 😊
Крутой видос! Всё очень доступно и понятно изложено!
Отличное видео, лайк, подписка. Продолжаю смотреть уроки по FastApi
Офигенно!, пару интересных идей подчерпнул спасибо большое!
спасибо большое!
Очень круто подаете информацию! Спасибо! Подписка и лайк)
Огонь! параллельно учусь всему и сразу на питоне)))) спасибо за практику, можно играться и вникать как работает 👍👍👍👍👍
спасибо, полезный урок
огромное спасибо за детальное описание как все работает под капотом ))))
Отличный видеоролик , пожалуйста продолжайте
годно, честно, очень круто подал материал
посмотрел на одном дыхании
Спасибо, Николай!!!! Не останавливайся!!!!
Отличная подача материала - постепенное введение в тему и подробное объяснение 👍
Спасибо огромное за качественный контент, очень подробно!
Спасибо за контент! Продуктивные 50 мин👍
Переменные окружения можно парсить с помощью BaseSettings из пайдентика
Хороший ролик, спасибо!
выглядит мнрогообещающе=) качетвенный контент, спасибо большое
Очень классно вышло)
Сразу лайкос
Нифига себе, мне тут надо тестовое сделать, думаю, у лухантоса точно есть что то по этой теме, смотрю - то что надо! и выложил 21 час назад)) как знал
@luchnos отличное начало! вот не понял почему в классе Юзер где создается таблица все типы просто указаны а boolean вызывается с помощью круглых скобок?
Круто ждём продолжение
Круто-круто 👍
можно сделать регионы вместо блоков. Попытаюсь объяснить, в начале объявляешь #region: Name of region и в конце #endregion. Думаю что так будет красивее, но делай как удобнее )
офигенно!
В Alembic для асинхронных миграций и автогенерации можно было запустить alembic init -t async
Спасибо, отличное начало чего-то большого и интересного! Очень интересно будет услышать про реализацию аутентификации/авторизации и системы ролей. Собираешься для этих целей использовать готовые решения что-то вроде fastapi-users или писать свои велосипеды?) Планируется ли фронт для этого проекта, если да, то с использованием какого стека?
фронт планирую, но пока не решил ещё в каком виде) мне потребуется помощь коллег для этого) что касается авторизации, то буду делать через JWT с использованием готовых решений) Чуть позже вы все увидите ;)
А на бусти есть реализация внутреннего чата для проекта на фастапи?
Хочу проект сделать, но нужно чтобы пользователи могли переписываться друг с другом. Функционал чата минимальный, по типу внутреннего чата на авито.
Нет статьи в описании, на базе которой сделан урок)
Лайк не глядя
один раз пробовал фастапи, сделал крад постов с картинками, авторизацией, всё думал довести до ума и не большой фронт симвалический накатить на реакте, как раз видос для освежения в памяти)
У Вас талант в создании презентаций
Hi there,
With pleasure waiting ur English contents. I can help u 👍🏻🤝
а не удобнее ли будет брать сессию через Depends(from fastapi) и прокидывать в нее функцию(она есть в доках fastapi) который нам выкидывает yield сессии, а потом ее коммитит(в данном случае flush) чтоб не писать постоянно эти страшные with. Или это в асинхронном не работает? я просто не пробовал еще работать с асинхронной алхимией
для меня это тоже первый опыт) во втором ролике я как раз depends добавил)
Или использовать декораторы запуска и остановки приложения.
А где ссылки на статьи на хабре?
Топчик!
Что нужно предварительно сделать(либо установить), чтобы команда "% docker-compose -f docker-compose.yaml ud -d" выполнилась? Если это где-то на канале раньше рассматривалось, то скиньте ссылку на видео, пожалуйста.
установить docker
👍
Хорошо объясняет автор, но смотрел на скорости х1,5
А что за туториал про фреймворк с нуля? Можно ссылку плиз?
Будет ли проект соответствовать структуре описанной в репозитории fastapi best practices?
слышал мнение, что там не оч хорошая архитектура
@@David-yj5kv кажется, дело вкуса. Но субъективно для меня, архитектура указанная там более понятна
Мне тоже кажется, что структура из best practices (аля Django) лучше. По крайней мере, лучше читаемая, как мне кажется.
А веб на чем будет?
Предлагаю использовать fastapi-utils для создания class handler
спасибо тебе большое, купил курс, который оказался в разы хуже твоего бесплатного. Благо нашел тебя )
А почему AQLAlchemy а не Ormar? Сам в этом не разбираюсь, просто слышал, что в обычной ОРМ есть модели и в пайдантик тоже, а в Ormar они объединены и, соответсвенно, кода для поддержки получается меньше в два раза.
для современного Pydantic есть SQLModel, которая является надстройкой над алхимией и BaseModel
@@forsee2328 что Ормар, что SQLModel накладывают ненужные ограничения и создают лишнею абстракция, я бы не рекомендовал к использованию
@@Fartek2 Сам pydantic накладывает большое количество ограничений, зачастую для обработки данных модели приходится конвертировать в датаклассы или что нибудь такое. Очень сложно заставить некоторые механизмы языка работать с pydantic моделью, потому что, например, он переопределяет __setattr__, однако свою задачу эти модели выполняют идеально.
Если у тебя нет комплексной логики, и все, что тебе нужно - например получить данные с эндпоинта, провалидировать и положить в бд - SQLModel будет отличным решением
Пробовал Ormar вроде надстройка на алхимией и был хорошей альтернативой пока алхимия не умела асинхронно работать, минус продукт свежий и было несколько раз после обновления приходилось почти все переписывать, в этом плане алхимия не значительно меняется.
почти ничего не понял но очень интересно
Для чего сейчас используют FastAPI, чаще для создания API или же можно и обычные веб-приложения с templates(html,css,js)?
для создания API, но можно прикрутить и шаблоны с jinja
@@artem1736 да, я видел. Но на сколько это эффективно так делать? Есть ли вообще смысл делать приложения с фронтом на fastapi?
@@user-cr5zz6yp2t ну лично мне кажется, что в таком случае логичнее использовать Фласк/Джанго
@@user-cr5zz6yp2t Мы же не знаем какое приложение вы хотите сделать. Если что-то современное и хоть сколько-нибудь сложное и кастомизируемое, лучше сразу делать как сейчас принято - отдельно апи и отдельно фронт на JS фреймворке.
@@MrLotrus я хотел узнать, стоит ли тратить время на этот Фреймворк, если планируешь делать веб-приложения с фронтом, а не только API.
Почему sessionmaker, а не async_sessionmaker?
Начал смотреть, сразу резануло глаз: импорты не по PEP в пайчарме можно просто нажать ctrl+alt+o
PS зашел в репу там щас все ок с этим :)
и непонятно почему в dbeaver порт localhost, если я ставлю такой порт то выходит ошибка, что неверный пароль
ты решил эту проблемку? у меня такой же вопрос.....
@@user-nu9oy4tf1o, Привет! Как-то решилось, уже не помню как, я все удалял, ставил заново. Но в следующих видео тоже что-то не шло и я уже сейчас больше просто смотрю и не прогаю)
А UserDAL можно назвать репозиторием?
это класс
@@user-ih8vs8xw2c я имел в виду это типо паттерн репозиторий?
А где видео про свой фреймворк с нуля? Не вижу в Вашем канале? На бусти?
так вот же)) th-cam.com/video/AXCHg_S1JPY/w-d-xo.html
Увидел импорты и уже плохо стало, что по PEP8?
Не переживай, линтеры прикрутим
А зачем 2 драйвера asyncpg и psycopg2? Или алембик только с psycopg2 работать умеет?
Нет, алембик через asyncpg тоже работает
это лучшее из того что есть на русском
А почему не воспользоваться библиотекой fastapi-users?
потому что я про неё впервые слышу)) спасибо!)
@@luchanos пожалуйста. Просто там из коробки уже все эндпоинты, сессии, куки, jwt и прочее. Меньше велосипедов будет :)
Библиотека fastapi-users еще сырая: не предусмотрены refresh токены, нет подтверждения e-mail, ...
Это все нужно будет допиливать самостоятельно
+
FastAPI умеет энвы из коробки читать. Зачем envparse?
Почему так мало лайков
Ужасно неприятно ставить psycopg2 (в т.ч. binary-версию) из-за вечных проблем с установкой
Во второй версии pydantic декоратор @validator переименовали в @field_validator, а orm_mode - в from_attributes, если у кого-то будут какие-то проблемы с этим.
..\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)
Как решить эту проблему?
@@user-eb2nz5nx1g схему в студию.