УРОКИ 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

  • @luchanos
    @luchanos Жыл бұрын

    Актуальный хэш коммита для видео ветки main - d51c3625c5d3ebc21eeb5377c36cbff751739329 Репозиторий - github.com/luchanos/luchanos_oxford_university

  • @stvJnK

    @stvJnK

    Жыл бұрын

    Удобнее когда ссылка в описании к ролику. Спасибо за видео урок!

  • @azamtoiri

    @azamtoiri

    Жыл бұрын

    Еще удобнее когда комментарий закреплен, Спасибо!

  • @luchanos

    @luchanos

    Жыл бұрын

    @@azamtoiri мискузи, поправил

  • @user-dg4rg3rk7k

    @user-dg4rg3rk7k

    Жыл бұрын

    @@luchanos а продолжение когда будет?

  • @user-vj7dp3rc8t
    @user-vj7dp3rc8t8 ай бұрын

    Очень круто, что код к каждому ролику можно посмотреть. Обычно либо нет кода вообще, и все по роликам переписываешь, либо есть конечный код всего, в котором без сто грамм не разберёшься. Огромный респект за такой практический курс.

  • @denissavast
    @denissavast Жыл бұрын

    Ну и молодец!!! Все четко и по существу, не прыгая по экранам. Огромное благодарю !

  • @n_bazarov
    @n_bazarov Жыл бұрын

    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

    @jcatstreams8550

    11 ай бұрын

    4 пункт деприкейтет

  • @d3en889
    @d3en889 Жыл бұрын

    Огонь! параллельно учусь всему и сразу на питоне)))) спасибо за практику, можно играться и вникать как работает 👍👍👍👍👍

  • @Alexio_kor
    @Alexio_kor8 ай бұрын

    Отличное видео, лайк, подписка. Продолжаю смотреть уроки по FastApi

  • @ChallengeBeasts
    @ChallengeBeasts Жыл бұрын

    Крутой видос! Всё очень доступно и понятно изложено!

  • @bgs12
    @bgs1211 ай бұрын

    огромное спасибо за детальное описание как все работает под капотом ))))

  • @user-gk8ex9qs8h
    @user-gk8ex9qs8h Жыл бұрын

    Очень круто подаете информацию! Спасибо! Подписка и лайк)

  • @alexeydanilov1557
    @alexeydanilov15572 ай бұрын

    Отличная подача материала - постепенное введение в тему и подробное объяснение 👍

  • @user-bx9hm3ls7l
    @user-bx9hm3ls7l3 ай бұрын

    Спасибо огромное за качественный контент, очень подробно!

  • @user-ih8vs8xw2c
    @user-ih8vs8xw2c Жыл бұрын

    годно, честно, очень круто подал материал посмотрел на одном дыхании

  • @Deiffify
    @Deiffify Жыл бұрын

    Благодарю за знания! Успехов и развития 😊

  • @evgends
    @evgendsАй бұрын

    "передаем параметр созвучный с тем полем которое мы хотим провалидировать" красиво сказано

  • @Anshegar
    @AnshegarАй бұрын

    Офигенно!, пару интересных идей подчерпнул спасибо большое!

  • @heavenyoung2590
    @heavenyoung2590 Жыл бұрын

    спасибо, полезный урок

  • @ivan_inanych
    @ivan_inanych Жыл бұрын

    Нифига себе, мне тут надо тестовое сделать, думаю, у лухантоса точно есть что то по этой теме, смотрю - то что надо! и выложил 21 час назад)) как знал

  • @user-tv6fr4et9j
    @user-tv6fr4et9j8 ай бұрын

    выглядит мнрогообещающе=) качетвенный контент, спасибо большое

  • @DevALine
    @DevALine Жыл бұрын

    Спасибо за контент! Продуктивные 50 мин👍

  • @torikki-tou
    @torikki-tou Жыл бұрын

    Переменные окружения можно парсить с помощью BaseSettings из пайдентика

  • @TheVenom20003
    @TheVenom20003 Жыл бұрын

    Отличный видеоролик , пожалуйста продолжайте

  • @azamtoiri
    @azamtoiri Жыл бұрын

    можно сделать регионы вместо блоков. Попытаюсь объяснить, в начале объявляешь #region: Name of region и в конце #endregion. Думаю что так будет красивее, но делай как удобнее )

  • @yuriybukovskiy449
    @yuriybukovskiy449 Жыл бұрын

    Спасибо, Николай!!!! Не останавливайся!!!!

  • @user-ek8qq6sh5r
    @user-ek8qq6sh5r7 ай бұрын

    Хороший ролик, спасибо!

  • @user-dk3sx6xk2u
    @user-dk3sx6xk2u Жыл бұрын

    В Alembic для асинхронных миграций и автогенерации можно было запустить alembic init -t async

  • @georgedudaev8738
    @georgedudaev87389 ай бұрын

    @luchnos отличное начало! вот не понял почему в классе Юзер где создается таблица все типы просто указаны а boolean вызывается с помощью круглых скобок?

  • @Anthony_Private
    @Anthony_Private Жыл бұрын

    Очень классно вышло)

  • @user-kt4yy5cf5e
    @user-kt4yy5cf5e Жыл бұрын

    один раз пробовал фастапи, сделал крад постов с картинками, авторизацией, всё думал довести до ума и не большой фронт симвалический накатить на реакте, как раз видос для освежения в памяти)

  • @realmanproject7529
    @realmanproject7529 Жыл бұрын

    Сразу лайкос

  • @everlastingsummer2044
    @everlastingsummer204410 ай бұрын

    спасибо большое!

  • @user-bw5in2yo7s
    @user-bw5in2yo7s Жыл бұрын

    Круто-круто 👍

  • @sinoikromov7322
    @sinoikromov7322 Жыл бұрын

    Круто ждём продолжение

  • @maxjokar7920
    @maxjokar7920 Жыл бұрын

    Hi there, With pleasure waiting ur English contents. I can help u 👍🏻🤝

  • @user-er7tp6cu6r
    @user-er7tp6cu6r Жыл бұрын

    А на бусти есть реализация внутреннего чата для проекта на фастапи? Хочу проект сделать, но нужно чтобы пользователи могли переписываться друг с другом. Функционал чата минимальный, по типу внутреннего чата на авито.

  • @futureghost2929
    @futureghost2929 Жыл бұрын

    офигенно!

  • @metallurg42
    @metallurg42 Жыл бұрын

    Спасибо, отличное начало чего-то большого и интересного! Очень интересно будет услышать про реализацию аутентификации/авторизации и системы ролей. Собираешься для этих целей использовать готовые решения что-то вроде fastapi-users или писать свои велосипеды?) Планируется ли фронт для этого проекта, если да, то с использованием какого стека?

  • @luchanos

    @luchanos

    Жыл бұрын

    фронт планирую, но пока не решил ещё в каком виде) мне потребуется помощь коллег для этого) что касается авторизации, то буду делать через JWT с использованием готовых решений) Чуть позже вы все увидите ;)

  • @only_prog-mk9tk
    @only_prog-mk9tk10 күн бұрын

    Для ubuntu команда сборки docker-compose будет через пробел. docker compose

  • @sashass099
    @sashass099 Жыл бұрын

    Лайк не глядя

  • @artyomklg915
    @artyomklg915 Жыл бұрын

    а не удобнее ли будет брать сессию через Depends(from fastapi) и прокидывать в нее функцию(она есть в доках fastapi) который нам выкидывает yield сессии, а потом ее коммитит(в данном случае flush) чтоб не писать постоянно эти страшные with. Или это в асинхронном не работает? я просто не пробовал еще работать с асинхронной алхимией

  • @luchanos

    @luchanos

    Жыл бұрын

    для меня это тоже первый опыт) во втором ролике я как раз depends добавил)

  • @stvJnK

    @stvJnK

    Жыл бұрын

    Или использовать декораторы запуска и остановки приложения.

  • @random_act
    @random_act6 ай бұрын

    У Вас талант в создании презентаций

  • @user-dg2gh9kr4h
    @user-dg2gh9kr4h8 ай бұрын

    Топчик!

  • @user-pw4cq7cp8v
    @user-pw4cq7cp8v Жыл бұрын

    Нет статьи в описании, на базе которой сделан урок)

  • @user-xn1cv6lj4x
    @user-xn1cv6lj4x6 ай бұрын

    спасибо тебе большое, купил курс, который оказался в разы хуже твоего бесплатного. Благо нашел тебя )

  • @iliakaribski2150
    @iliakaribski2150 Жыл бұрын

    Предлагаю использовать fastapi-utils для создания class handler

  • @psylo1841
    @psylo1841 Жыл бұрын

    А где ссылки на статьи на хабре?

  • @user-eb2nz5nx1g
    @user-eb2nz5nx1g7 ай бұрын

    Что нужно предварительно сделать(либо установить), чтобы команда "% docker-compose -f docker-compose.yaml ud -d" выполнилась? Если это где-то на канале раньше рассматривалось, то скиньте ссылку на видео, пожалуйста.

  • @user-qp6ru1tc4t

    @user-qp6ru1tc4t

    5 ай бұрын

    установить docker

  • @ibrahimoglu
    @ibrahimoglu Жыл бұрын

    👍

  • @skachkovalexandr1636
    @skachkovalexandr1636 Жыл бұрын

    Хорошо объясняет автор, но смотрел на скорости х1,5

  • @user-ts6wk3mu2l
    @user-ts6wk3mu2l Жыл бұрын

    Будет ли проект соответствовать структуре описанной в репозитории fastapi best practices?

  • @David-yj5kv

    @David-yj5kv

    Жыл бұрын

    слышал мнение, что там не оч хорошая архитектура

  • @user-ts6wk3mu2l

    @user-ts6wk3mu2l

    Жыл бұрын

    @@David-yj5kv кажется, дело вкуса. Но субъективно для меня, архитектура указанная там более понятна

  • @vladvlad3544

    @vladvlad3544

    10 ай бұрын

    Мне тоже кажется, что структура из best practices (аля Django) лучше. По крайней мере, лучше читаемая, как мне кажется.

  • @VGCor
    @VGCor Жыл бұрын

    А почему AQLAlchemy а не Ormar? Сам в этом не разбираюсь, просто слышал, что в обычной ОРМ есть модели и в пайдантик тоже, а в Ormar они объединены и, соответсвенно, кода для поддержки получается меньше в два раза.

  • @forsee2328

    @forsee2328

    Жыл бұрын

    для современного Pydantic есть SQLModel, которая является надстройкой над алхимией и BaseModel

  • @Fartek2

    @Fartek2

    Жыл бұрын

    @@forsee2328 что Ормар, что SQLModel накладывают ненужные ограничения и создают лишнею абстракция, я бы не рекомендовал к использованию

  • @forsee2328

    @forsee2328

    Жыл бұрын

    @@Fartek2 Сам pydantic накладывает большое количество ограничений, зачастую для обработки данных модели приходится конвертировать в датаклассы или что нибудь такое. Очень сложно заставить некоторые механизмы языка работать с pydantic моделью, потому что, например, он переопределяет __setattr__, однако свою задачу эти модели выполняют идеально. Если у тебя нет комплексной логики, и все, что тебе нужно - например получить данные с эндпоинта, провалидировать и положить в бд - SQLModel будет отличным решением

  • @stvJnK

    @stvJnK

    Жыл бұрын

    Пробовал Ormar вроде надстройка на алхимией и был хорошей альтернативой пока алхимия не умела асинхронно работать, минус продукт свежий и было несколько раз после обновления приходилось почти все переписывать, в этом плане алхимия не значительно меняется.

  • @ivanpriz4547
    @ivanpriz45478 ай бұрын

    А что за туториал про фреймворк с нуля? Можно ссылку плиз?

  • @vendorkont4141
    @vendorkont414117 күн бұрын

    sessionmaker необходимо заменить на async_sessionmaker

  • @r35p3ct00
    @r35p3ct00 Жыл бұрын

    А веб на чем будет?

  • @user-cr5zz6yp2t
    @user-cr5zz6yp2t Жыл бұрын

    Для чего сейчас используют FastAPI, чаще для создания API или же можно и обычные веб-приложения с templates(html,css,js)?

  • @artem1736

    @artem1736

    Жыл бұрын

    для создания API, но можно прикрутить и шаблоны с jinja

  • @user-cr5zz6yp2t

    @user-cr5zz6yp2t

    Жыл бұрын

    @@artem1736 да, я видел. Но на сколько это эффективно так делать? Есть ли вообще смысл делать приложения с фронтом на fastapi?

  • @artem1736

    @artem1736

    Жыл бұрын

    @@user-cr5zz6yp2t ну лично мне кажется, что в таком случае логичнее использовать Фласк/Джанго

  • @MrLotrus

    @MrLotrus

    Жыл бұрын

    @@user-cr5zz6yp2t Мы же не знаем какое приложение вы хотите сделать. Если что-то современное и хоть сколько-нибудь сложное и кастомизируемое, лучше сразу делать как сейчас принято - отдельно апи и отдельно фронт на JS фреймворке.

  • @user-cr5zz6yp2t

    @user-cr5zz6yp2t

    Жыл бұрын

    @@MrLotrus я хотел узнать, стоит ли тратить время на этот Фреймворк, если планируешь делать веб-приложения с фронтом, а не только API.

  • @dedinside6275
    @dedinside6275 Жыл бұрын

    почти ничего не понял но очень интересно

  • @alexseydugin8109
    @alexseydugin8109 Жыл бұрын

    Начал смотреть, сразу резануло глаз: импорты не по PEP в пайчарме можно просто нажать ctrl+alt+o PS зашел в репу там щас все ок с этим :)

  • @666SeeR999
    @666SeeR9997 ай бұрын

    Почему sessionmaker, а не async_sessionmaker?

  • @fffffffff6862
    @fffffffff6862 Жыл бұрын

    это лучшее из того что есть на русском

  • @konstantintroitskiy4426
    @konstantintroitskiy4426 Жыл бұрын

    А зачем 2 драйвера asyncpg и psycopg2? Или алембик только с psycopg2 работать умеет?

  • @vladvlad3544

    @vladvlad3544

    10 ай бұрын

    Нет, алембик через asyncpg тоже работает

  • @denisk730
    @denisk730 Жыл бұрын

    +

  • @AlecsFly
    @AlecsFly Жыл бұрын

    Увидел импорты и уже плохо стало, что по PEP8?

  • @luchanos

    @luchanos

    Жыл бұрын

    Не переживай, линтеры прикрутим

  • @kanamagg
    @kanamagg4 ай бұрын

    и непонятно почему в dbeaver порт localhost, если я ставлю такой порт то выходит ошибка, что неверный пароль

  • @user-nu9oy4tf1o

    @user-nu9oy4tf1o

    4 ай бұрын

    ты решил эту проблемку? у меня такой же вопрос.....

  • @kanamagg

    @kanamagg

    3 ай бұрын

    @@user-nu9oy4tf1o, Привет! Как-то решилось, уже не помню как, я все удалял, ставил заново. Но в следующих видео тоже что-то не шло и я уже сейчас больше просто смотрю и не прогаю)

  • @Antonio-ib6ii
    @Antonio-ib6ii Жыл бұрын

    А где видео про свой фреймворк с нуля? Не вижу в Вашем канале? На бусти?

  • @luchanos

    @luchanos

    Жыл бұрын

    так вот же)) kzread.info/dash/bejne/c4x3qsmYg5SwgLw.html

  • @h3ckphy246
    @h3ckphy246 Жыл бұрын

    А UserDAL можно назвать репозиторием?

  • @user-ih8vs8xw2c

    @user-ih8vs8xw2c

    Жыл бұрын

    это класс

  • @h3ckphy246

    @h3ckphy246

    Жыл бұрын

    @@user-ih8vs8xw2c я имел в виду это типо паттерн репозиторий?

  • @mrKey881
    @mrKey88111 ай бұрын

    FastAPI умеет энвы из коробки читать. Зачем envparse?

  • @dmitriynekrasov3098
    @dmitriynekrasov3098 Жыл бұрын

    А почему не воспользоваться библиотекой fastapi-users?

  • @luchanos

    @luchanos

    Жыл бұрын

    потому что я про неё впервые слышу)) спасибо!)

  • @dmitriynekrasov3098

    @dmitriynekrasov3098

    Жыл бұрын

    @@luchanos пожалуйста. Просто там из коробки уже все эндпоинты, сессии, куки, jwt и прочее. Меньше велосипедов будет :)

  • @oleksandr7201

    @oleksandr7201

    9 ай бұрын

    Библиотека fastapi-users еще сырая: не предусмотрены refresh токены, нет подтверждения e-mail, ... Это все нужно будет допиливать самостоятельно

  • @gapchannelAi
    @gapchannelAi Жыл бұрын

    Почему так мало лайков

  • @TechnoBog-ov2mp
    @TechnoBog-ov2mp Жыл бұрын

    Ужасно неприятно ставить psycopg2 (в т.ч. binary-версию) из-за вечных проблем с установкой

  • @PlagueisMKII
    @PlagueisMKII11 ай бұрын

    Во второй версии pydantic декоратор @validator переименовали в @field_validator, а orm_mode - в from_attributes, если у кого-то будут какие-то проблемы с этим.

  • @user-eb2nz5nx1g

    @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

    @PlagueisMKII

    7 ай бұрын

    @@user-eb2nz5nx1g схему в студию.

Келесі