Очень круто, что код к каждому ролику можно посмотреть. Обычно либо нет кода вообще, и все по роликам переписываешь, либо есть конечный код всего, в котором без сто грамм не разберёшься. Огромный респект за такой практический курс.
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. А так в целом задел неплохой
а не удобнее ли будет брать сессию через Depends(from fastapi) и прокидывать в нее функцию(она есть в доках fastapi) который нам выкидывает yield сессии, а потом ее коммитит(в данном случае flush) чтоб не писать постоянно эти страшные with. Или это в асинхронном не работает? я просто не пробовал еще работать с асинхронной алхимией
@luchnos отличное начало! вот не понял почему в классе Юзер где создается таблица все типы просто указаны а boolean вызывается с помощью круглых скобок?
один раз пробовал фастапи, сделал крад постов с картинками, авторизацией, всё думал довести до ума и не большой фронт симвалический накатить на реакте, как раз видос для освежения в памяти)
А на бусти есть реализация внутреннего чата для проекта на фастапи? Хочу проект сделать, но нужно чтобы пользователи могли переписываться друг с другом. Функционал чата минимальный, по типу внутреннего чата на авито.
Что нужно предварительно сделать(либо установить), чтобы команда "% docker-compose -f docker-compose.yaml ud -d" выполнилась? Если это где-то на канале раньше рассматривалось, то скиньте ссылку на видео, пожалуйста.
можно сделать регионы вместо блоков. Попытаюсь объяснить, в начале объявляешь #region: Name of region и в конце #endregion. Думаю что так будет красивее, но делай как удобнее )
Спасибо, отличное начало чего-то большого и интересного! Очень интересно будет услышать про реализацию аутентификации/авторизации и системы ролей. Собираешься для этих целей использовать готовые решения что-то вроде fastapi-users или писать свои велосипеды?) Планируется ли фронт для этого проекта, если да, то с использованием какого стека?
фронт планирую, но пока не решил ещё в каком виде) мне потребуется помощь коллег для этого) что касается авторизации, то буду делать через JWT с использованием готовых решений) Чуть позже вы все увидите ;)
Брух. Если работать с FastAPI + Pydantic, то логичнее всего было бы DB обвязку закончить моделями на SQLModel, а не голой алхимии. Помимо этого в 2к24 использовать голый pip это ужос ящитаю. Куда удобнее и проще раз настроить poetry.
Во второй версии 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) Как решить эту проблему?
@@ВладимирБыков-ш1ь Мы же не знаем какое приложение вы хотите сделать. Если что-то современное и хоть сколько-нибудь сложное и кастомизируемое, лучше сразу делать как сейчас принято - отдельно апи и отдельно фронт на JS фреймворке.
@@РусланЧернов-ж5с, Привет! Как-то решилось, уже не помню как, я все удалял, ставил заново. Но в следующих видео тоже что-то не шло и я уже сейчас больше просто смотрю и не прогаю)
А почему AQLAlchemy а не Ormar? Сам в этом не разбираюсь, просто слышал, что в обычной ОРМ есть модели и в пайдантик тоже, а в Ormar они объединены и, соответсвенно, кода для поддержки получается меньше в два раза.
@@Fartek2 Сам pydantic накладывает большое количество ограничений, зачастую для обработки данных модели приходится конвертировать в датаклассы или что нибудь такое. Очень сложно заставить некоторые механизмы языка работать с pydantic моделью, потому что, например, он переопределяет __setattr__, однако свою задачу эти модели выполняют идеально. Если у тебя нет комплексной логики, и все, что тебе нужно - например получить данные с эндпоинта, провалидировать и положить в бд - SQLModel будет отличным решением
Пробовал Ormar вроде надстройка на алхимией и был хорошей альтернативой пока алхимия не умела асинхронно работать, минус продукт свежий и было несколько раз после обновления приходилось почти все переписывать, в этом плане алхимия не значительно меняется.
Актуальный хэш коммита для видео ветки main - d51c3625c5d3ebc21eeb5377c36cbff751739329
Репозиторий - github.com/luchanos/luchanos_oxford_university
Удобнее когда ссылка в описании к ролику. Спасибо за видео урок!
Еще удобнее когда комментарий закреплен, Спасибо!
@@azamtoiri мискузи, поправил
@@luchanos а продолжение когда будет?
Очень круто, что код к каждому ролику можно посмотреть.
Обычно либо нет кода вообще, и все по роликам переписываешь, либо есть конечный код всего, в котором без сто грамм не разберёшься.
Огромный респект за такой практический курс.
Отличная подача материала - постепенное введение в тему и подробное объяснение 👍
Переменные окружения можно парсить с помощью BaseSettings из пайдентика
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 пункт деприкейтет
Спасибо огромное за качественный контент, очень подробно!
Нифига себе, мне тут надо тестовое сделать, думаю, у лухантоса точно есть что то по этой теме, смотрю - то что надо! и выложил 21 час назад)) как знал
Ну и молодец!!! Все четко и по существу, не прыгая по экранам. Огромное благодарю !
огромное спасибо за детальное описание как все работает под капотом ))))
а не удобнее ли будет брать сессию через Depends(from fastapi) и прокидывать в нее функцию(она есть в доках fastapi) который нам выкидывает yield сессии, а потом ее коммитит(в данном случае flush) чтоб не писать постоянно эти страшные with. Или это в асинхронном не работает? я просто не пробовал еще работать с асинхронной алхимией
для меня это тоже первый опыт) во втором ролике я как раз depends добавил)
Или использовать декораторы запуска и остановки приложения.
"передаем параметр созвучный с тем полем которое мы хотим провалидировать" красиво сказано
Отличное видео, лайк, подписка. Продолжаю смотреть уроки по FastApi
Офигенно!, пару интересных идей подчерпнул спасибо большое!
выглядит мнрогообещающе=) качетвенный контент, спасибо большое
А где ссылки на статьи на хабре?
В Alembic для асинхронных миграций и автогенерации можно было запустить alembic init -t async
Крутой видос! Всё очень доступно и понятно изложено!
годно, честно, очень круто подал материал
посмотрел на одном дыхании
Огонь! параллельно учусь всему и сразу на питоне)))) спасибо за практику, можно играться и вникать как работает 👍👍👍👍👍
@luchnos отличное начало! вот не понял почему в классе Юзер где создается таблица все типы просто указаны а boolean вызывается с помощью круглых скобок?
Очень круто подаете информацию! Спасибо! Подписка и лайк)
Спасибо, Николай!!!! Не останавливайся!!!!
один раз пробовал фастапи, сделал крад постов с картинками, авторизацией, всё думал довести до ума и не большой фронт симвалический накатить на реакте, как раз видос для освежения в памяти)
Hi there,
With pleasure waiting ur English contents. I can help u 👍🏻🤝
Для ubuntu команда сборки docker-compose будет через пробел. docker compose
Сразу лайкос
Благодарю за знания! Успехов и развития 😊
А на бусти есть реализация внутреннего чата для проекта на фастапи?
Хочу проект сделать, но нужно чтобы пользователи могли переписываться друг с другом. Функционал чата минимальный, по типу внутреннего чата на авито.
Хоспаде... Как же много кода в сравнении с Джанго)) Но будем прорываться через тернии к звездам))
спасибо, полезный урок
Отличный видеоролик , пожалуйста продолжайте
Нет статьи в описании, на базе которой сделан урок)
Что нужно предварительно сделать(либо установить), чтобы команда "% docker-compose -f docker-compose.yaml ud -d" выполнилась? Если это где-то на канале раньше рассматривалось, то скиньте ссылку на видео, пожалуйста.
установить docker
А разве WSGI/ASGI - это не стандартизация интерфейса для взаимодействия нашего приложения с веб-сервером?
Хороший ролик, спасибо!
можно сделать регионы вместо блоков. Попытаюсь объяснить, в начале объявляешь #region: Name of region и в конце #endregion. Думаю что так будет красивее, но делай как удобнее )
У Вас талант в создании презентаций
А что за туториал про фреймворк с нуля? Можно ссылку плиз?
Спасибо за контент! Продуктивные 50 мин👍
Лайк не глядя
спасибо тебе большое, купил курс, который оказался в разы хуже твоего бесплатного. Благо нашел тебя )
Спасибо, отличное начало чего-то большого и интересного! Очень интересно будет услышать про реализацию аутентификации/авторизации и системы ролей. Собираешься для этих целей использовать готовые решения что-то вроде fastapi-users или писать свои велосипеды?) Планируется ли фронт для этого проекта, если да, то с использованием какого стека?
фронт планирую, но пока не решил ещё в каком виде) мне потребуется помощь коллег для этого) что касается авторизации, то буду делать через JWT с использованием готовых решений) Чуть позже вы все увидите ;)
А веб на чем будет?
Брух. Если работать с FastAPI + Pydantic, то логичнее всего было бы DB обвязку закончить моделями на SQLModel, а не голой алхимии.
Помимо этого в 2к24 использовать голый pip это ужос ящитаю. Куда удобнее и проще раз настроить poetry.
Во второй версии 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)
Как решить эту проблему?
@@ВячаФродо схему в студию.
Круто-круто 👍
Будет ли проект соответствовать структуре описанной в репозитории fastapi best practices?
слышал мнение, что там не оч хорошая архитектура
@@David-yj5kv кажется, дело вкуса. Но субъективно для меня, архитектура указанная там более понятна
Мне тоже кажется, что структура из best practices (аля Django) лучше. По крайней мере, лучше читаемая, как мне кажется.
Почему sessionmaker, а не async_sessionmaker?
Очень классно вышло)
спасибо большое!
Для чего сейчас используют FastAPI, чаще для создания API или же можно и обычные веб-приложения с templates(html,css,js)?
для создания API, но можно прикрутить и шаблоны с jinja
@@artem1736 да, я видел. Но на сколько это эффективно так делать? Есть ли вообще смысл делать приложения с фронтом на fastapi?
@@ВладимирБыков-ш1ь ну лично мне кажется, что в таком случае логичнее использовать Фласк/Джанго
@@ВладимирБыков-ш1ь Мы же не знаем какое приложение вы хотите сделать. Если что-то современное и хоть сколько-нибудь сложное и кастомизируемое, лучше сразу делать как сейчас принято - отдельно апи и отдельно фронт на JS фреймворке.
@@MrLotrus я хотел узнать, стоит ли тратить время на этот Фреймворк, если планируешь делать веб-приложения с фронтом, а не только API.
почти ничего не понял но очень интересно
и непонятно почему в dbeaver порт localhost, если я ставлю такой порт то выходит ошибка, что неверный пароль
ты решил эту проблемку? у меня такой же вопрос.....
@@РусланЧернов-ж5с, Привет! Как-то решилось, уже не помню как, я все удалял, ставил заново. Но в следующих видео тоже что-то не шло и я уже сейчас больше просто смотрю и не прогаю)
скорее всего у тебя запущен postgres и локально, и в докер. возможно, ты пытаешься подключиться к бд не той, что в докер запущена
@@bernardsoul8936 спасибо за ответ
@@kanamagg да, скорее порт занят локальной Постгре или чем-то еще
Круто ждём продолжение
А почему AQLAlchemy а не Ormar? Сам в этом не разбираюсь, просто слышал, что в обычной ОРМ есть модели и в пайдантик тоже, а в Ormar они объединены и, соответсвенно, кода для поддержки получается меньше в два раза.
для современного Pydantic есть SQLModel, которая является надстройкой над алхимией и BaseModel
@@forsee2328 что Ормар, что SQLModel накладывают ненужные ограничения и создают лишнею абстракция, я бы не рекомендовал к использованию
@@Fartek2 Сам pydantic накладывает большое количество ограничений, зачастую для обработки данных модели приходится конвертировать в датаклассы или что нибудь такое. Очень сложно заставить некоторые механизмы языка работать с pydantic моделью, потому что, например, он переопределяет __setattr__, однако свою задачу эти модели выполняют идеально.
Если у тебя нет комплексной логики, и все, что тебе нужно - например получить данные с эндпоинта, провалидировать и положить в бд - SQLModel будет отличным решением
Пробовал Ormar вроде надстройка на алхимией и был хорошей альтернативой пока алхимия не умела асинхронно работать, минус продукт свежий и было несколько раз после обновления приходилось почти все переписывать, в этом плане алхимия не значительно меняется.
Увидел импорты и уже плохо стало, что по PEP8?
Не переживай, линтеры прикрутим
Хорошо объясняет автор, но смотрел на скорости х1,5
офигенно!
А зачем 2 драйвера asyncpg и psycopg2? Или алембик только с psycopg2 работать умеет?
Нет, алембик через asyncpg тоже работает
sessionmaker необходимо заменить на async_sessionmaker
А где видео про свой фреймворк с нуля? Не вижу в Вашем канале? На бусти?
так вот же)) ua-cam.com/video/AXCHg_S1JPY/v-deo.html
Предлагаю использовать fastapi-utils для создания class handler
А UserDAL можно назвать репозиторием?
это класс
@@твойкомментатор-ц3о я имел в виду это типо паттерн репозиторий?
А почему не воспользоваться библиотекой fastapi-users?
потому что я про неё впервые слышу)) спасибо!)
@@luchanos пожалуйста. Просто там из коробки уже все эндпоинты, сессии, куки, jwt и прочее. Меньше велосипедов будет :)
Библиотека fastapi-users еще сырая: не предусмотрены refresh токены, нет подтверждения e-mail, ...
Это все нужно будет допиливать самостоятельно
Топчик!
Начал смотреть, сразу резануло глаз: импорты не по PEP в пайчарме можно просто нажать ctrl+alt+o
PS зашел в репу там щас все ок с этим :)
это лучшее из того что есть на русском
FastAPI умеет энвы из коробки читать. Зачем envparse?
Ужасно неприятно ставить psycopg2 (в т.ч. binary-версию) из-за вечных проблем с установкой
Почему так мало лайков
👍
+