Базовое приложение на FastAPI | Каркас проекта FastAPI + SQLAlchemy (ascynio) + alembic

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 พ.ย. 2024

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

  • @Жиловшопе
    @Жиловшопе 6 หลายเดือนก่อน +8

    Теперь я усваиваю на 200% лучше. Синхронизация произошла!!! Такая подача - спокойный обычный разговор - the best! Спасибо, что учитываешь пожелания и рекомендации подписчиков.

    • @SurenKhorenyan
      @SurenKhorenyan  6 หลายเดือนก่อน +1

      Кайф! Рад, что вы оценили! Супер, буду продолжать совершенствоваться 🥰

    • @knowledgedose1956
      @knowledgedose1956 6 หลายเดือนก่อน +1

      на скорости 2х вообще будет 400%😂

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

      Хааа 😅

  • @surgeon7690
    @surgeon7690 4 หลายเดือนก่อน +3

    Сурен, досмотрел Ваш очередной ролик, не зря время потрачено. Ну и как всегда - отсутствие воды и много полезных технических нюансов! Так держать!

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

      Круто, спасибо! Очень приятно, очень рад, что вам понравилось 🥰

  • @Alex-zl7wg
    @Alex-zl7wg 2 หลายเดือนก่อน +1

    Превосходная подача материала! Всё подробно и в то же время ничего лишнего. Преподавать ваше призвание! Спасибо за курс.

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

      Пожалуйста! Очень приятно, спасибо 🥰😊

  • @AleksandrMaltsev-jm8ph
    @AleksandrMaltsev-jm8ph 4 หลายเดือนก่อน +3

    Короче, 3 день сижу с твоим уроком, шикарно, спасибо, у нас все было на фласке и 1.4 Алхимии, старым пидантиком, и старым питоном 3.10. Спасибо тебе огромное, это невероятно помогло оформитьв голове план миграции, на фастапи и новые библиотеки

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

      Круто! Пожалуйста! Я рад, что смог помочь ☺️

  • @welaskez4997
    @welaskez4997 6 หลายเดือนก่อน +4

    сразу бросается в глаза что нет типовых «ээ» «аа», складная речь, респект

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

      Кайф! Очень приятно, что вы заметили 🥰

  • @gomor1575
    @gomor1575 6 หลายเดือนก่อน +7

    У тебя лучший курс по фаст апи на Ютубе. Сразу видно, что ты не просто прочитал документацию по фаст апи и записал курс, как минимум по тому, что ты знаешь, что f строка быстрее str(). Если было бы поменьше воды, то курс был бы идеален

    • @AHTOH_IO
      @AHTOH_IO 6 หลายเดือนก่อน +2

      Без воды он был бы сухим)
      Сурен чёткий!

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

      Спасибо! Хаа, а что вы относите к "воде"?

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

      Спасибо!

    • @AHTOH_IO
      @AHTOH_IO 6 หลายเดือนก่อน +1

      @@SurenKhorenyan что-то помимо кода, которое является "лирическим отступлением"
      Вообще её у Вас(тебя) мало! Вполне сжато и по-делу

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

      @@AHTOH_IO а сваггер это тоже отступление? Там кода нет 😁

  • @yuriybukovskiy449
    @yuriybukovskiy449 5 หลายเดือนก่อน +2

    Сурен, как всегда на высоте! Спасибо за проделанную работу!

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

      Кайф, пожалуйста!

  • @artur.tokranov
    @artur.tokranov 6 หลายเดือนก่อน +3

    Сурен, спасибо большое за труды!

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

      Пожалуйста! Рад, что вы оценили

  • @ДмитрийСергеев-л6г
    @ДмитрийСергеев-л6г 6 หลายเดือนก่อน +3

    Очень нравится контент твоего канала. Спасибо!

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

      Крутяк, я рад! Пожалуйста!

  • @ОльгаПлатонова-д4з
    @ОльгаПлатонова-д4з 6 หลายเดือนก่อน +3

    Огромное спасибо, круто! Всё понятно, ёмко и по делу

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

      Класс, пожалуйста! Рад 😊

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

    Огромное спасибо за работу!!!!

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

      Пожалуйста! Очень приятно 🥰

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

    Отлично, сжато, без воды и все самое главное. Еще бы добавить сюда асинхронные тесты. Ну и можно линтеры (ну и black -> ruff)

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

      Спасибо! Согласен, только в такой ролик пока не влезает 😁

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

    Вот это кайф! Спасибо огромное!🙏

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

      Пожалуйста! Рад, что понравилось

  • @3agoskin
    @3agoskin 6 หลายเดือนก่อน +2

    У тебя прекрасные видео, как вводные. В свое время меня очень испугала документация алхимии, а сейчас стал вопрос как строить бэкенд, который и на МЛ завязан, и вот все внимание сейчас ушло к пайтону, который я просто забросил.
    Вот отличные вводные, чтобы что-то попробовать с тобой собрать, получить базовую ментальную карту и дальше двигаться
    Видосы у тебя мего огромные, это большая работа в такой Ютьюб опенсорс, спасибо!

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

      Крутяк, пожалуйста! Спасибо огромное! Очень приятно 🥰

  • @MasterGroosha
    @MasterGroosha 6 หลายเดือนก่อน +2

    Отличное видео! Спасибо, Сурен!

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

      Пожалуйста! Рад, что вам понравилось!

  • @thisIsMine007
    @thisIsMine007 6 หลายเดือนก่อน +2

    Вот этот видеоурок больше похож на основу frameworka Fast api чем предыдущие. Спасибо за труд и уделения времени

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

      Пожалуйста!

  • @mister_Iks
    @mister_Iks 6 หลายเดือนก่อน +2

    Спасибо! Именно это сейчас мне нужно))

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

      Огонь! Пожалуйста!

  • @AleksandrMaltsev-jm8ph
    @AleksandrMaltsev-jm8ph 5 หลายเดือนก่อน +2

    Спасибо за этот топик, очень круто!

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

      Пожалуйста! Рад, что вам понравилось 🥰

  • @chizhovnet
    @chizhovnet 4 หลายเดือนก่อน +1

    01:05 Старт проекта: установка зависимостей и git ве-->к

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

      Спасибо! Поправил

  • @rebelbait
    @rebelbait 5 หลายเดือนก่อน +3

    Сурен, доброго времени суток, надеюсь это не последнее видео про FastAPI)

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

      Здравствуйте! Точно не последнее

  • @romanryaboshtan9270
    @romanryaboshtan9270 4 หลายเดือนก่อน +2

    круто, подробно объясняешь, спасибо

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

      Кайф, я рад, что вам понравилось! пожалуйста

  • @Qustoos
    @Qustoos 6 หลายเดือนก่อน +2

    Отличное видео, спасибо за контент!

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

      Пожалуйста! Рад, что понравилось 😊

  • @gasitar8229
    @gasitar8229 4 หลายเดือนก่อน +2

    Классное видео, подача супер.

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

      Пожалуйста!

  • @ГеоргВартанов
    @ГеоргВартанов 4 หลายเดือนก่อน +1

    Спасибо!
    Комент ради комента.
    Жду новые видео)

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

      Пожалуйста! Кайф, очень приятно ☺
      Дальше - больше 💪

  • @kopylov_vadik
    @kopylov_vadik 6 หลายเดือนก่อน +2

    спасибо за материал !
    Вы используете copilot в своей ide ?

    • @SurenKhorenyan
      @SurenKhorenyan  6 หลายเดือนก่อน +1

      Пожалуйста!
      Нет, не использую. Подсказки встроенные в PyCharm (оффлайн автокомплит)

  • @ivanalexandrovsky1909
    @ivanalexandrovsky1909 4 หลายเดือนก่อน +1

    Прикинь, уже пишу первый микросервис (шлюз на FastAPI) за зп, в частности благодаря тебе!
    Спасибо тебе за труд!!! 🙏
    4ый раз пересматриваю, уже почти наизусть выучил все, долго настраивать основу проекта конечно😅

    • @SurenKhorenyan
      @SurenKhorenyan  4 หลายเดือนก่อน +1

      @@ivanalexandrovsky1909 крутяк, поздравляю!

    • @ivanalexandrovsky1909
      @ivanalexandrovsky1909 3 หลายเดือนก่อน +1

      @@SurenKhorenyan привет! Я закончил тот набросок, он пока не в продовом состоянии, умный дядя не переписывал, но т.к. это чисто мое авторосто, я могу тебе скинуть, как идею для обучалки по FastAPI типа в комплексе с httpx асинхронным
      Плюс, если понравится, могу дальнейшими идеями использования поделиться, я под работу по принципу RAG хаб писал для множественного подключения ИИ.
      Типа чисто идея от меня тебе, на безвозмездной основе, даже можно и нужно по фактам разнести, что где не так, я не против :) мне только на пользу
      Сразу на первых парах скажу:
      Тупо requirements (без poetry), неиспользования форматтеров и куча мелочей еще по упрощению - требование Лида по «не усложнению проекта»
      По проекту в целом не хочу и не могу пока рассказывать особо, в личку напишу, если интересно 😊

    • @SurenKhorenyan
      @SurenKhorenyan  3 หลายเดือนก่อน +1

      ​@@ivanalexandrovsky1909 Привет! Если хотите поделиться и получить обратную связь, приходите в телеграм чат 😊

    • @ivanalexandrovsky1909
      @ivanalexandrovsky1909 3 หลายเดือนก่อน +1

      @@SurenKhorenyan договорились 👍

    • @ivanalexandrovsky1909
      @ivanalexandrovsky1909 3 หลายเดือนก่อน +1

      @@SurenKhorenyan а есть там возможность dm писать?

  • @AleksandrMaltsev-jm8ph
    @AleksandrMaltsev-jm8ph 5 หลายเดือนก่อน +2

    ООО так же было бы круто, увидеть твой конфиг на монорепо с несколькими микросервисами, например, добавить в этот сервис по авторизации юзеров

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

      Подумаю, может быть что-то в голову придёт 🙂

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

    Подскажите, вы планируете показать как прикрутить pytest к этому всему? Хотелось бы увидеть как делать асинхронное тестирование.

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

      @@babanlive здравствуйте! Про тестирование обязательно ещё будут ролики

  • @shasoqa
    @shasoqa 4 หลายเดือนก่อน +2

    Просто легенда ютуба
    ---
    Нужен видос про правильное логирование ювикорна. Стандартное оно никакое, а как сделать красиво и правильно(!) очень мало информации

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

      @@shasoqa спасибо!
      Когда-нибудь и по этой теме будет ролик 🙂

  • @Pr0xymate
    @Pr0xymate 5 หลายเดือนก่อน +4

    Все хочется выучить и начать пользоваться FastAPI, но как же сильно отпугивает эта вся ручная настройка alembic/sqlalchemy... Как же все удобно и для людей сделано в джанго...

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

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

  • @Narek-y1f
    @Narek-y1f หลายเดือนก่อน +1

    Suren jan shat lavner apres) bayc mihat senc harc unem xi sqlalchemy ayl voch te sqlModel?

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

      Merci!
      Использую SQLAlchemy, потому что её используют и знают везде. SQLModel это скорее демонстрация "смотрите, как ещё можно", но реальных проектов с SQLModel я до сих пор не видел, хотя уже несколько лет с выпуска прошло.

  • @АлександрСмирнов-е1и
    @АлександрСмирнов-е1и 6 หลายเดือนก่อน +2

    Спасибо за видео, оч полезно. Ты сказал на 46:17 про монорепозиторий, и .env для каждого микросервиса в своем каталоге. А если 2 микросервиса и больше, как считаешь, какая бест практика по установке пакетов для каждого микросервиса? Переходить на pip requir*.txt для каждого микросервиса или в pyproject делать группы или extra для каждого микросервиса или что-то иное?

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

      Смотря как сильно будут разделены ваши микросервисы. Можно для каждого проекта сделать свой отдельный конфиг для зависимостей, угу

  • @ZlobniyTapoG
    @ZlobniyTapoG 6 หลายเดือนก่อน +2

    Сурен, очень хотелось бы увидеть от тебя что-то подобное, но с реализацией архитектурного паттерна DDD, например.

    • @SurenKhorenyan
      @SurenKhorenyan  6 หลายเดือนก่อน +1

      Привет. В ближайшее время не планирую. Можете заказать тему через подписку с уровнем Профессионал на бусти. Но там уже очередь на июнь, так что даже если сейчас оформите, будет не раньше июля или даже августа.

  • @Chris-dx7oi
    @Chris-dx7oi 3 หลายเดือนก่อน +1

    Привет, отличный контент, особенно нравится подробное объяснение различных тонкостей и нюансов)
    Есть 2 вопроса:
    1. Объект для переменной db из класса Settings инициализируется неявно за счёт использования model_config и env файла, в котором определено значение для url, ведь по сути нигде явного присваивания не было?
    2. В своей коммерческой деятельности ты используешь такую же архитектуру при написании микросервисов? Неоднократно встречал дискуссии на тему применения различных архитектурных подходов при построении микросервисов, но сам в теме плохо разбираюсь...

    • @SurenKhorenyan
      @SurenKhorenyan  3 หลายเดือนก่อน +1

      @@Chris-dx7oi привет, спасибо!
      1. Это Pydantic settings делает, так и задумано. Автоматическое чтение из файла
      2. Да, такого подхода придерживаюсь

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

    Привет, Сурен
    Знаком с тобой больше года почти!)
    Благодаря твоим видео уловил принципы Django и далее нашел самостоятельно пути развития и устроился Джуном)
    Сейчас уж больно понравилось расширение для пуша в гит с одного файла, но с выбором изменений, не подскажешь есть ли такое же расширение для vs code?

    • @SurenKhorenyan
      @SurenKhorenyan  6 หลายเดือนก่อน +1

      Привет. Круто!
      Вы большой молодец.
      Вы про какое расширение? В PyCharm и в VS Code встроенная работа с git. Я через него и работаю. Нет опции выбрать, какие изменения пушить. Если вы про переписывание истории, то я это сделал за кадром, чтобы не грузить зрителей

    • @kadzutokun
      @kadzutokun 6 หลายเดือนก่อน +1

      @@SurenKhorenyan Нет, я про возможность не сразу пушить весь файл в гит, а выбирать строки кода через плюсик для пуша

    • @kadzutokun
      @kadzutokun 6 หลายเดือนก่อน +1

      @@SurenKhorenyan Спасибо большое!)
      Продолжайте вести ваш канал, у вас здорово получается!)

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

      Для пуша или для коммита? Для коммита просто кликаю напротив строк

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

      Пожалуйста!

  • @МайклАртурович
    @МайклАртурович 3 หลายเดือนก่อน +1

    Сурен, спасибо за видео, кое что новое подчерпнул, да еще и есть готовая адеватная структура для будущих проектов. 🤝. А тебя не бесит, когда в ответе id отображается внизу?) Особенно когда большая json’ина.

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

      Круто, пожалуйста!
      Нет, не бесит, а почему должно бесить? JSON объект не требует упорядочивания. Да и код этот читает компьютер, мы с вами изредка его видим.
      Но если вам нужно, чтобы id был в начале, добавьте его в Out / Read модель над остальными свойствами

  • @АндрейТарев-т7б
    @АндрейТарев-т7б 3 หลายเดือนก่อน +1

    Здравствуйте, Сурен, спасибо за прекрасное видео. Подскажите пожалуйста, при такой структуре файлов как у вас куда сложить папку с тестами? Куда не положу возникает ошибка с импортами, буду благодарен если скините ссылку на пример репозитория с тестами

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

      @@АндрейТарев-т7б здравствуйте. Пожалуйста!
      Папку с тестами кладите в корень приложения, то есть тут в fastapi-base-app
      По ошибкам можем подсказать в телеграм чате, приходите

  • @АлександрБамбуляк-з3х
    @АлександрБамбуляк-з3х 3 หลายเดือนก่อน +1

    Приветствую, Сурен!
    Спасибо за ваш труд. Иду по вашим шагам в настройке своего базового проекта и наткнулся на проблему в моменте, когда вы показываете манипуляции с переменным окружением (__48_мин__). При настройке:
    model_config = SettingsConfigDict( env_file=(".env.template", ".env"),
    case_sensitive=False,
    env_nested_delimiter="__",
    env_prefix="APP_CONFIG__", )
    Пытаюсь запустить свое приложение выходит следующая ошибка:
    File "D:\_projects\fastApi_base_app\app\main.py", line 6, in
    from core.config import settings
    File "D:\_projects\fastApi_base_app\app\core\config.py", line 66, in
    settings = Settings()
    ^^^^^^^^^^
    File "D:\_projects\fastApi_base_app\.venv\Lib\site-packages\pydantic_settings\main.py", line 144, in __init__
    super().__init__(
    File "D:\_projects\fastApi_base_app\.venv\Lib\site-packages\pydantic\main.py", line 193, in __init__
    self.__pydantic_validator__.validate_python(data, self_instance=self)
    pydantic_core._pydantic_core.ValidationError: 1 validation error for Settings
    db
    Field required [type=missing, input_value={}, input_type=dict]
    For further information visit errors.pydantic.dev/2.8/v/missing
    У вас была такое же предупреждение до настройки model_config.
    Помогите советом почему у меня settings ругается на отсутствие аргумента.

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

      @@АлександрБамбуляк-з3х привет! Возможно, дело в расположении файлов. Приходите в телеграм чат, с удовольствием подскажем. Тут неудобно совсем разбирать код

  • @K3NT_
    @K3NT_ 6 หลายเดือนก่อน +2

    Спасибо за видео. А как называется эта архитектура? Вообще какая архитектура лучше для fastapi? Что насчет clean архитектуры?

    • @SurenKhorenyan
      @SurenKhorenyan  6 หลายเดือนก่อน +1

      Пожалуйста! Без понятия как называется 😅
      Лучше та, с которой вам удобно работать 🙂

  • @АнтонМиндлин
    @АнтонМиндлин 4 หลายเดือนก่อน +1

    Спасибо, Сделал свой шаблон на базе твоего. Вопрос. Почему ты не используешь фабрику для нициализации app?

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

      @@АнтонМиндлин пожалуйста!
      Тут не добрался. В новом ролике (про доступ к документации) сделал отдельную функцию

  • @vladav7480
    @vladav7480 2 หลายเดือนก่อน +1

    Спасибо! А как включить такие подсказки в PyCharm, чтобы он дальнейший код предугадывал?

    • @SurenKhorenyan
      @SurenKhorenyan  2 หลายเดือนก่อน +1

      Это Full Line Completion

  • @surgeon7690
    @surgeon7690 4 หลายเดือนก่อน +2

    Всё замечательно, только непонятна избыточная любовь в пайчарму)))

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

      Супер!
      Нет любви, есть разве что нелюбовь. Просто среды разработки лучше пока тоже не сделали

    • @surgeon7690
      @surgeon7690 4 หลายเดือนก่อน +1

      @@SurenKhorenyan, хирург профессионал сделает аппендэктомию обычным перочинным или столовым ножом. Я, по основной профессии хирург и мне много лет, больше чем Вам. Но... Много сред и IDE я поюзал, в программировании с 12 лет... Тогда и понятий таких не было. И могу однозначно констатировать, что PyCharm не лучшее решение. Ну несомненно это моё ИМХО.. И я же знаю, что Вы в курсе)))... Есть, реально более гибкое и удобное решение для питонистов. А в общем, Вы реально молодец! Смотрю Ваши видео с удовольствием! Python вы знаете. Удачи, коллега!

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

      Спасибо! И какие у вас инструменты для работы (не хирургом)? Я перепробовал много сред и редакторов, остановился на PyCharm по совокупности факторов, но все они сводятся к "просто удобнее"

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

      @@SurenKhorenyan Сурен, а Вы не будете против, если я ближайшее время отвечу Вам в лс в Телеграмм? Просто youtube комментарии не совсем, наверное, правильное место для подобной беседы. У каждого разработчика ведь свои, ему удобные мотивы выбора среды или редактора. Я, кстати, переосмыслил свой первый комментарий... Думаю, что не совсем прав был.

  • @opitral
    @opitral 4 หลายเดือนก่อน +2

    почему не юзаешь паттерн controller -> service -> repository -> model ?

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

      @@opitral привет! А покажите хороший пример, пожалуйста. И я про это обязательно расскажу

  • @hollowknight7180
    @hollowknight7180 6 หลายเดือนก่อน +2

    Лучший! 😁

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

      Крутяк, спасибо!

  • @ufc_uz6
    @ufc_uz6 6 หลายเดือนก่อน +2

    Круто❤

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

      Класс, спасибо!

  • @krylovilya1
    @krylovilya1 5 หลายเดือนก่อน +2

    Теперь ждём ролик по litestar)

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

      Ох, возможно. Но это пока не точно

  • @Dikodance
    @Dikodance 5 หลายเดือนก่อน +1

    видео супер. Расскажите про версионирование апи. как его лучше организовать

    • @SurenKhorenyan
      @SurenKhorenyan  5 หลายเดือนก่อน +1

      Класс, спасибо! Рад, что вам понравилось 🥰
      А как вы себе представляете версионирование?
      Новые поля добавляем, старые не меняем и не удаляем. Если меняется структура, то делаем папку по аналогии с api_v1, только называем api_v2, и внутри всё по новой. У вас какие-то сложности есть?

    • @Dikodance
      @Dikodance 5 หลายเดือนก่อน +1

      @@SurenKhorenyan я с php+фреймворк переезжаю. там эта задача состоит из 2 моментов:
      1. Как лучше разложить по папкам контроллеры (в терминах mvc)
      2. Как настроить роутер что б было меньше писанины.
      Обычно я завожу папку modules.
      В ней подпапки с версиями (v1,v2,v2_1), которые через конфиг фреймворка подтягиваются в роутер.
      Как версионирую:
      В папке v1/controllers/UserController.php лежит первая версия контроллера.
      В папке v2/controllers/UserController.php лежит отнаследованный от v1/controllers/UserController.php контроллер, с перегрузками экшенов которые надо поменять в данной версии.
      А тут как лучше это организовать?

    • @SurenKhorenyan
      @SurenKhorenyan  5 หลายเดือนก่อน +1

      ​@@Dikodance В питоне тоже можно делать наследование. Но, вероятно, опыт из другого языка и фреймворка лучше 1в1 не тащить в другой. Посмотрите как это делается в новом. И нужно ли вам тащить все эти версии сразу?

    • @SurenKhorenyan
      @SurenKhorenyan  5 หลายเดือนก่อน +1

      @@Dikodance кстати, если придёте в чат в телеграм, может быть вам подскажут лучше меня. Там люди с опытом пхп тоже есть

    • @Dikodance
      @Dikodance 5 หลายเดือนก่อน +1

      @@SurenKhorenyan я это понимаю. поэтому и спрашиваю. Тут вообще помоему не получится такая логика.
      Если скажем есть файл
      v1/users с функцией:
      @app.get("v1/items")
      async def read_items(request: Request)
      ...
      @app.get("v1/admins")
      async def read_items(request: Request)
      ...
      и в v2/users мне надо перегрузить только /admins то префикс у роута @app.get("v1/items") то не поменяется в новом классе автоматом.

  • @romul23
    @romul23 6 หลายเดือนก่อน +2

    не получается создать конфиг с подмоделью у которой в наименовании api - это глюк pydantic-settings. помогает только переименование.

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

      Ого! А покажите? У меня в примере работает же.. можете в чат в телеграм закинуть пример кода?

  • @Dmitriy_Pesk0ff
    @Dmitriy_Pesk0ff 6 หลายเดือนก่อน +1

    1:22:43 - Сурен, а как же дзен Python? "Явное лучше чем не явное"😊

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

      А в чём противоречие? Если речь про from_attributes, я рассказываю как раньше было. Для тех, кто понимает боль, показанный пример актуален. Остальным по барабану, и можно не писать лишний код. Или вы про что-то другое?

  • @tonyborbozo
    @tonyborbozo 4 หลายเดือนก่อน +1

    Привет. Не могу понять суть проблемы. Контейнер с базой понимается, но есть нюанс, не создаёт все до конца. Судя по всему не создаёт базу и пользователя, так как появляется ошибка что такой то пользователь не прошёл валидацию. Ребята есть соображения?

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

      Скорее всего вы поменяли пароль после первого запуска. Грохните базу и попробуйте снова

    • @tonyborbozo
      @tonyborbozo 4 หลายเดือนก่อน +1

      @@SurenKhorenyan поменял входной порт и все заработало. На 5432 у меня что то висит

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

      Отлично. Обычно тут помогает ребут

  • @popcorn_833
    @popcorn_833 5 หลายเดือนก่อน +1

    Привет, спасибо за видео!
    Такой вопрос: Как правильно рассчитать poll_size для engine? И max_connections для postgres?

    • @SurenKhorenyan
      @SurenKhorenyan  5 หลายเดือนก่อน +1

      Привет, пожалуйста!
      Ставьте как показал в видео и не парьтесь. Реальные значения надо получать опытным путём на конкретном проекте: давать нагрузку и смотреть, что и как происходит

    • @popcorn_833
      @popcorn_833 5 หลายเดือนก่อน +1

      Какие средние значения у ваших проектах?

    • @SurenKhorenyan
      @SurenKhorenyan  5 หลายเดือนก่อน +1

      @@popcorn_833 я показал как раз те, что обычно использую: 50 и 10 оверфлоу

    • @popcorn_833
      @popcorn_833 5 หลายเดือนก่อน +1

      @@SurenKhorenyanСпасибо!

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

      @@popcorn_833 пожалуйста!

  • @emreaaga
    @emreaaga 5 หลายเดือนก่อน +1

    когда уже выйдет фулстэк пример с html/css

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

      Как только так сразу! Ускорить выход роликов на интересующую вас тему можно через бусти 😊

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

    Как работает бд и докер? По идее если нет такой бд создано локально, то докер компоуз создаст ее. Но у меня получаеться пишет, что такой бд с таким именем не существует. Как вообще такое возможно?
    Код полностью склонирован, только сменила юзера бд.

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

      @@user-fo8yv6cf9h сделайте docker compose down -v, чтобы удалить базу, а потом заново поднимите. Создастся с новым конфигом

  • @thisIsMine007
    @thisIsMine007 6 หลายเดือนก่อน +1

    Было бы еще лучьше, если еще по SQL-alchemy и pydantic дали бы бозовые понятия

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

      По алхимии в этом же плейлисте есть несколько видео

  • @MrEligos
    @MrEligos 6 หลายเดือนก่อน +2

    спс

  • @tonyborbozo
    @tonyborbozo 4 หลายเดือนก่อน +1

    Не пойму причину, но если явно не указать название таблицы для User, alembic не добавляет ее. В чем может быть причина?

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

      @@tonyborbozo а откуда будет известно имя таблицы, если вы не укажете?

    • @tonyborbozo
      @tonyborbozo 4 หลายเดือนก่อน +1

      @@SurenKhorenyan я делаю по вашему мануалу, предполагается что она должна генерироваться методом обозначеном в классе base. Или что то я не так понял?

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

      @@tonyborbozo да, всё верно, имя должно генерироваться. А этого не происходит? По коду можем подсказать в тг чате

    • @tonyborbozo
      @tonyborbozo 4 หลายเดือนก่อน +1

      @@SurenKhorenyan спасибо. Постараюсь сам понять.

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

      ​@@tonyborbozo Пожалуйста 😊

  • @lsd_btw
    @lsd_btw 4 หลายเดือนก่อน +1

    Спасибо! Крутой ролик)
    Все делал по гайду, но во время миграции вылезает ошибка: asyncpg.exceptions.InvalidPasswordError: password authentication failed for user "user". Создавал новые контейнеры, скачивал репо заново, но ничего не помогает(
    В чем может быть причина?

    • @SurenKhorenyan
      @SurenKhorenyan  4 หลายเดือนก่อน +1

      Пожалуйста!
      Скорее всего дело в неправильном пароле.
      Попробуйте грохнуть (удалить) контейнер и запустить заново. Убедитесь, что в конфиге для приложения правильный пароль указан в нужном файле

    • @lsd_btw
      @lsd_btw 4 หลายเดือนก่อน +1

      @@SurenKhorenyan Спасибо, все работает.
      Я случайно изменил название .env файла и не заметил )

    • @SurenKhorenyan
      @SurenKhorenyan  4 หลายเดือนก่อน +1

      @@lsd_btw ахаха, бывает

  • @AleksandrMaltsev-jm8ph
    @AleksandrMaltsev-jm8ph 5 หลายเดือนก่อน +1

    Было бы круто если бы ты добавил в этот конфиг pytest

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

      Этим летом будут ещё ролики по тестированию приложения, скорее всего сюда же и добавлю

    • @AleksandrMaltsev-jm8ph
      @AleksandrMaltsev-jm8ph 5 หลายเดือนก่อน +1

      @@SurenKhorenyan очень жду

  • @apostol_fet
    @apostol_fet 6 หลายเดือนก่อน +1

    Очень смущает использование глобальной переменной settings

    • @SurenKhorenyan
      @SurenKhorenyan  6 หลายเดือนก่อน +1

      Если вас смущает, можете просто в каждом модуле, где нужно взять настойки, инициализировать экземпляр настроек заново. Только зачем? Что вы так сэкономите, какую проблему решите? Лишняя работа и только

    • @MaximShandruk
      @MaximShandruk 5 หลายเดือนก่อน +1

      @@SurenKhorenyan Привет спасибо за труд! а если создать функцию get_settings() под декоратором lru_cache? Я не в коем случае не хочу умничать)) Просто порой бывает сложно понять как лучше сделать(видел множство примеров и часто люди делают по разному), без функции выглядит лаконичнее))

    • @SurenKhorenyan
      @SurenKhorenyan  5 หลายเดือนก่อน +1

      @@MaximShandruk так можно сделать (технически да, я такое даже встречал в продакшне). Только зачем? А итоге всё равно будет один и тот же экземпляр, только его ещё и получать нужно будет через функцию, а не через готовую переменную. Лишняя работа, которая ничему не помогает

  • @vandriichuk
    @vandriichuk 4 หลายเดือนก่อน +1

    Подчерпнул

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

      @@vandriichuk отлично!

  • @Serg-2013
    @Serg-2013 3 หลายเดือนก่อน

    Сделал сборку параметра URL DB в конфигах через проперти атрибут. Насколько так ок делать, и есть ли лучше подход?
    ```
    class DatabaseConfig(BaseModel):
    host: str = "localhost"
    port: int = 5432
    database: str = ''
    user: str = ''
    password: str = ''
    @property
    def url(self) -> PostgresDsn:
    return f"postgresql+asyncpg://{self.user}:{self.password}@{self.host}:{self.port}/{self.database}"
    ```

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

      Здравствуйте! Как вариант можно использовать алхимичный URL.create
      docs.sqlalchemy.org/en/20/core/engines.html#sqlalchemy.engine.URL.create