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

ความคิดเห็น • 103

  • @luchanos
    @luchanos  ปีที่แล้ว +13

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

    • @stvJnK
      @stvJnK ปีที่แล้ว +5

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

    • @azamtoiri
      @azamtoiri ปีที่แล้ว

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

    • @luchanos
      @luchanos  ปีที่แล้ว

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

    • @user-dg4rg3rk7k
      @user-dg4rg3rk7k ปีที่แล้ว

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

  • @user-vj7dp3rc8t
    @user-vj7dp3rc8t 6 หลายเดือนก่อน +3

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

  • @n_bazarov
    @n_bazarov ปีที่แล้ว +21

    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 9 หลายเดือนก่อน +1

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

  • @denissavast
    @denissavast ปีที่แล้ว +3

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

  • @Deiffify
    @Deiffify ปีที่แล้ว +1

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

  • @ChallengeBeasts
    @ChallengeBeasts 11 หลายเดือนก่อน

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

  • @Alexio_kor
    @Alexio_kor 6 หลายเดือนก่อน

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

  • @Anshegar
    @Anshegar 2 วันที่ผ่านมา

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

  • @everlastingsummer2044
    @everlastingsummer2044 8 หลายเดือนก่อน

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

  • @user-gk8ex9qs8h
    @user-gk8ex9qs8h ปีที่แล้ว

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

  • @d3en889
    @d3en889 10 หลายเดือนก่อน

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

  • @heavenyoung2590
    @heavenyoung2590 ปีที่แล้ว

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

  • @bgs12
    @bgs12 9 หลายเดือนก่อน

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

  • @TheVenom20003
    @TheVenom20003 ปีที่แล้ว

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

  • @user-ih8vs8xw2c
    @user-ih8vs8xw2c ปีที่แล้ว

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

  • @yuriybukovskiy449
    @yuriybukovskiy449 ปีที่แล้ว

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

  • @alexeydanilov1557
    @alexeydanilov1557 15 วันที่ผ่านมา

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

  • @user-bx9hm3ls7l
    @user-bx9hm3ls7l หลายเดือนก่อน

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

  • @DevALine
    @DevALine ปีที่แล้ว

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

  • @torikki-tou
    @torikki-tou ปีที่แล้ว +6

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

  • @user-ek8qq6sh5r
    @user-ek8qq6sh5r 6 หลายเดือนก่อน

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

  • @user-tv6fr4et9j
    @user-tv6fr4et9j 6 หลายเดือนก่อน

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

  • @Anthony_Private
    @Anthony_Private ปีที่แล้ว

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

  • @realmanproject7529
    @realmanproject7529 ปีที่แล้ว +5

    Сразу лайкос

  • @ivan_inanych
    @ivan_inanych ปีที่แล้ว +2

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

  • @georgedudaev8738
    @georgedudaev8738 7 หลายเดือนก่อน

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

  • @sinoikromov7322
    @sinoikromov7322 ปีที่แล้ว

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

  • @user-bw5in2yo7s
    @user-bw5in2yo7s ปีที่แล้ว

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

  • @azamtoiri
    @azamtoiri ปีที่แล้ว +2

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

  • @futureghost2929
    @futureghost2929 ปีที่แล้ว

    офигенно!

  • @user-dk3sx6xk2u
    @user-dk3sx6xk2u ปีที่แล้ว +2

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

  • @metallurg42
    @metallurg42 ปีที่แล้ว +5

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

    • @luchanos
      @luchanos  ปีที่แล้ว +2

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

  • @user-er7tp6cu6r
    @user-er7tp6cu6r 11 หลายเดือนก่อน

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

  • @user-pw4cq7cp8v
    @user-pw4cq7cp8v ปีที่แล้ว

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

  • @sashass099
    @sashass099 ปีที่แล้ว +2

    Лайк не глядя

  • @user-kt4yy5cf5e
    @user-kt4yy5cf5e ปีที่แล้ว +1

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

  • @random_act
    @random_act 5 หลายเดือนก่อน

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

  • @maxjokar7920
    @maxjokar7920 ปีที่แล้ว +1

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

  • @artyomklg915
    @artyomklg915 ปีที่แล้ว +6

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

    • @luchanos
      @luchanos  ปีที่แล้ว

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

    • @stvJnK
      @stvJnK ปีที่แล้ว

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

  • @psylo1841
    @psylo1841 ปีที่แล้ว +2

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

  • @user-dg2gh9kr4h
    @user-dg2gh9kr4h 6 หลายเดือนก่อน

    Топчик!

  • @user-eb2nz5nx1g
    @user-eb2nz5nx1g 5 หลายเดือนก่อน

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

    • @user-qp6ru1tc4t
      @user-qp6ru1tc4t 3 หลายเดือนก่อน

      установить docker

  • @ibrahimoglu
    @ibrahimoglu ปีที่แล้ว

    👍

  • @skachkovalexandr1636
    @skachkovalexandr1636 ปีที่แล้ว

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

  • @ivanpriz4547
    @ivanpriz4547 6 หลายเดือนก่อน

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

  • @user-ts6wk3mu2l
    @user-ts6wk3mu2l ปีที่แล้ว +1

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

    • @David-yj5kv
      @David-yj5kv ปีที่แล้ว

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

    • @user-ts6wk3mu2l
      @user-ts6wk3mu2l ปีที่แล้ว

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

    • @vladvlad3544
      @vladvlad3544 8 หลายเดือนก่อน

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

  • @r35p3ct00
    @r35p3ct00 ปีที่แล้ว

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

  • @iliakaribski2150
    @iliakaribski2150 ปีที่แล้ว

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

  • @user-xn1cv6lj4x
    @user-xn1cv6lj4x 4 หลายเดือนก่อน

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

  • @VGCor
    @VGCor ปีที่แล้ว

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

    • @forsee2328
      @forsee2328 ปีที่แล้ว +1

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

    • @Fartek2
      @Fartek2 ปีที่แล้ว +1

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

    • @forsee2328
      @forsee2328 ปีที่แล้ว +1

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

    • @stvJnK
      @stvJnK ปีที่แล้ว

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

  • @dedinside6275
    @dedinside6275 ปีที่แล้ว +1

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

  • @user-cr5zz6yp2t
    @user-cr5zz6yp2t ปีที่แล้ว

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

    • @artem1736
      @artem1736 ปีที่แล้ว

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

    • @user-cr5zz6yp2t
      @user-cr5zz6yp2t ปีที่แล้ว

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

    • @artem1736
      @artem1736 ปีที่แล้ว +1

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

    • @MrLotrus
      @MrLotrus ปีที่แล้ว

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

    • @user-cr5zz6yp2t
      @user-cr5zz6yp2t ปีที่แล้ว

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

  • @666SeeR999
    @666SeeR999 5 หลายเดือนก่อน

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

  • @alexseydugin8109
    @alexseydugin8109 ปีที่แล้ว

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

  • @kanamagg
    @kanamagg 2 หลายเดือนก่อน

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

    • @user-nu9oy4tf1o
      @user-nu9oy4tf1o 2 หลายเดือนก่อน

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

    • @kanamagg
      @kanamagg หลายเดือนก่อน

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

  • @h3ckphy246
    @h3ckphy246 ปีที่แล้ว

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

    • @user-ih8vs8xw2c
      @user-ih8vs8xw2c ปีที่แล้ว

      это класс

    • @h3ckphy246
      @h3ckphy246 ปีที่แล้ว

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

  • @Antonio-ib6ii
    @Antonio-ib6ii ปีที่แล้ว

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

    • @luchanos
      @luchanos  ปีที่แล้ว

      так вот же)) th-cam.com/video/AXCHg_S1JPY/w-d-xo.html

  • @AlecsFly
    @AlecsFly ปีที่แล้ว +2

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

    • @luchanos
      @luchanos  ปีที่แล้ว +1

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

  • @konstantintroitskiy4426
    @konstantintroitskiy4426 11 หลายเดือนก่อน

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

    • @vladvlad3544
      @vladvlad3544 8 หลายเดือนก่อน +1

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

  • @fffffffff6862
    @fffffffff6862 ปีที่แล้ว

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

  • @dmitriynekrasov3098
    @dmitriynekrasov3098 ปีที่แล้ว

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

    • @luchanos
      @luchanos  ปีที่แล้ว

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

    • @dmitriynekrasov3098
      @dmitriynekrasov3098 ปีที่แล้ว +1

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

    • @oleksandr7201
      @oleksandr7201 7 หลายเดือนก่อน

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

  • @denisk730
    @denisk730 ปีที่แล้ว

    +

  • @mrKey881
    @mrKey881 10 หลายเดือนก่อน

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

  • @gapchannelAi
    @gapchannelAi ปีที่แล้ว

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

  • @TechnoBog-ov2mp
    @TechnoBog-ov2mp ปีที่แล้ว +1

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

  • @PlagueisMKII
    @PlagueisMKII 9 หลายเดือนก่อน +3

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

    • @user-eb2nz5nx1g
      @user-eb2nz5nx1g 5 หลายเดือนก่อน

      ..\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 5 หลายเดือนก่อน

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