FastAPI - Регистрация и Авторизация Пользователей #5

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

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

  • @artemshumeiko
    @artemshumeiko  ปีที่แล้ว +19

    💡 Попробуй онлайн-тренажёр для подготовки к техническому собеседованию: clck.ru/3B5gwP 💡
    Забирай роадмап изучения самого востребованного фреймворка на Python - FastAPI здесь: t.me/ArtemShumeikoBot

    • @ГеоргийКольман
      @ГеоргийКольман ปีที่แล้ว +1

      Здравствуйте, а вы можете отдельно сделать видео по созданию кастомного пользователя. Вы говорили в этом видео, что изначально была именно такая идея. Только со всеми мелочами и плюшками. Это очень важно. Если не Вам будет не очень сложно)

    • @__-fx5gd
      @__-fx5gd 7 หลายเดือนก่อน

      Здравствуйте! Начал изучать FastAPI по вашему курсу, столкнулся с проблемой: после изменения названия таблиц в модели БД и создания новой ревизии, не могу обновиться до этой ревизии т.к название таблицы не изменяется, а просто создается новая: sqlalchemy.exc.InternalError: удалить объект таблица roles нельзя, так как от него зависят другие объекты.

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

      @@__-fx5gd достаточно поменять в миграции код на ALTER TABLE table_name RENAME TO new_table_name, чтобы не удалялась и создавалась таблица

  • @programming_etc
    @programming_etc ปีที่แล้ว +67

    Я занимаюсь разработкой на python уже почти 5 лет и прекрасно понимаю всё, что ты показываешь в своих видео, но твоя подача всё равно заставляет смотреть до конца. Очень приятная картинка, превью и подача, просто кайф. Желаю тебе успехов и побольше подписчиков для такого годного контента!

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

      зачем тогда смотреть когда знаешь?

    • @Gregory-vc2vs
      @Gregory-vc2vs ปีที่แล้ว +3

      @@fresh_wind87 а как понять, что ты это все знаешь, не посмотрев?

    • @ДианаСуанова-о3и
      @ДианаСуанова-о3и 9 หลายเดือนก่อน

      @@Gregory-vc2vs когда знаешь то знаешь что знаешь..хых

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

      Прикол в том что кто понимает не очень смотреть не так уж легко

  • @eva_grin_0941
    @eva_grin_0941 ปีที่แล้ว +8

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

  • @СергейИльин-к9ж
    @СергейИльин-к9ж ปีที่แล้ว +3

    Потратил пол дня на эту библиотеку, а тут за 40 мин. все по полочкам) Однозначно подписка👍

  • @dmitryrotanin
    @dmitryrotanin ปีที่แล้ว +4

    Спасибо за курс! Подача супер крутая, лучше туториала на русском я не встречал! Артем, ты молодец! Отличная работа, я восхищаюсь и параллельно продолжаю курс!

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

    Артем, у вас отличная подача и умение хорошо объяснять сложный материал (что на самом деле, очень редкое качество). Большое вам спасибо за ваши уроки и удачи в работе и развитии канала!

  • @griigorievamaria
    @griigorievamaria ปีที่แล้ว +4

    Ура, новое видео! Классный новогодний фон😍

  • @hugo-onzakorderra8851
    @hugo-onzakorderra8851 ปีที่แล้ว +4

    Идентификация - определение пользователя. Аутентификация - проверка принадлежности идентификатора тому пользователю, который этот идентификатор предъявляет. Авторизация - проверка прав пользователя на использование конкретного ресурса.

  • @alekseyveld7559
    @alekseyveld7559 ปีที่แล้ว +11

    Артём, ОГРОМНОЕ СПАСИБО ЗА ЭТО ВИДЕО! Ты создаешь очень годный контент и рассказываешь о том, что сейчас не найти на TH-cam. Расскажи пожалуйста про Fastapi-admin или Starlette-admin или про любую админку которую использую с Fastapi. СПАСИБО!

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

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

    • @AS-fk5fw
      @AS-fk5fw ปีที่แล้ว

      @@artemshumeiko круто! я по ключевому слову fastapi admin попал на канал

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

    При создании хендлера для логина обычно рекомендуется использовать метод POST вместо метода GET. Это связано с тем, что метод GET передает данные формы через URL-адрес, который может быть легко просмотрен и перехвачен злоумышленником.
    Если пользователь вводит свои учетные данные в форму для входа, используя метод GET, то эти данные будут открыто передаваться в URL-адресе. Это может стать проблемой для безопасности, так как злоумышленник может перехватить эти данные с помощью простого сниффинга или посредника.
    С другой стороны, при использовании метода POST данные формы передаются в теле запроса, а не в URL-адресе. Это обеспечивает большую безопасность, так как данные не будут открыто передаваться и будут скрыты от посторонних глаз.
    Поэтому, чтобы обеспечить безопасность пользователей, рекомендуется использовать метод POST для передачи учетных данных при логине.

    • @ЫГы-р2д
      @ЫГы-р2д ปีที่แล้ว

      GET запрос зашифрован, кроме самого домена и порта

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

      @@ЫГы-р2д ,
      Шифрование не зависит от типа запроса это зависит от http или https

  • @ДмитрийПьянков-р9ю
    @ДмитрийПьянков-р9ю ปีที่แล้ว +4

    Ооо наконец, ждал этого именно прр юзерс!

  • @АлександрФедотов-к4ф
    @АлександрФедотов-к4ф ปีที่แล้ว +1

    Спасибо большое. Наверно самое понятное объяснение из всех видео, которые я пересмотрел

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

    Невероятная подача материала. Спасибо большое!

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

    Честно признаться, я давно не был в таком щенячьем восторге от курсов. Помимо самого FastAPI он мне уже покрыл кучу пробелов моих

  • @user-qd9gc9fk1k
    @user-qd9gc9fk1k ปีที่แล้ว +7

    Подскажите пожалуйста, почему при входе требуется ввести username и password, но вместо username мы вводим email?

  • @ВладиславСиницын-ъ4х
    @ВладиславСиницын-ъ4х 11 วันที่ผ่านมา

    Cпасибо большое! этот урок очень выручил.

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

    Отличный канал! Как раз решил попробовать FastAPI!

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

      Успешного изучения!

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

    Благодарю за урок, много полезной информации!

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

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

  • @AS-fk5fw
    @AS-fk5fw ปีที่แล้ว +1

    На работе как раз FastAPI, но для пет-проекта в этой же компании не хватает знаний. Спасибо за твой урок, очень ценно! вернусь ещё на канал)

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

      Спасибо за отзыв!

  • @СынБожий-ь5п
    @СынБожий-ь5п 10 หลายเดือนก่อน +2

    Автор красавчик так-то. Очень хорошо доносишь материал, но правда на сегодняшний день FastAPI Users изменили тот код который мы сначала скопировали не думая, а потом задумались, по этому в итоге вообще ничего не понятно касательно класса, приходится переписывать как было у автора. Теперь там не Column а Mapped...

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

    Артем, большое спасибо за Ваши уроки. С удовольствием постигаю FastAPI. ) Надеюсь , с Вашей помощью , в ближайшее время создать какое-то всое приложение ).

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

      Спасибо! Успехов вам!

  • @ЕленаКаштанова-к6з
    @ЕленаКаштанова-к6з 11 หลายเดือนก่อน

    Спасибо! Очень понятно, преподавательский талант вас не обошел стороной-:)))

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

      спасибо :)

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

    6 лет на джанге сижу, хочу на фастапи перебираться. Вижу только плюсы пока. Из минусов наверно то, что нет админки встроенной и то, что от orm нужно отучаться и привыкать к алхимии. Буду своё приложение переписывать на фастапи. Короче, спасибо Артём. Лайкос.

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

      удачи вам!

  • @0limjon
    @0limjon ปีที่แล้ว

    Спасибо за ролики, хороший старт для изучения FastAPI

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

    Большое спасибо за контент! В русскоязычном сегменте пока самый доступный вариант объяснения

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

    спасибо за ваше старание. Очень полезный контент!

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

    Курсы - логично, практично и фантастично :) СПСБ,!

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

    Большое спасибо за ваш курс!

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

    Спасибо за курс, очень помогает вкатиться в бэк =)

  • @orthodox-chanel
    @orthodox-chanel หลายเดือนก่อน

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

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

    кайф) давно не было видео и думал, что пропал) спасибо!

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

    Спасибо за такой полезный урок!

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

      Рад помочь :) Спасибо

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

    Спасибо большое за курс, очень информативно

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

    Спасибо тебе большое, Артём! Всё чётко разъяснил за авторизацию 😂 пожалуйста, продолжай пилить видосы дальше🥵 хотел бы увидеть интеграцию с AWS S3

  • @БогданДовгаль-з4с
    @БогданДовгаль-з4с ปีที่แล้ว

    После джанго так непривычно, что начал понимать тему после третьего просмотра с параллельной практикой, но материал отличный

  • @РусланОсманов-с7й
    @РусланОсманов-с7й หลายเดือนก่อน

    супер! спасибо!! мне понравилось!

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

    сердечно благодарю за уроки)

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

    Очень крутые видео, спасибо за курс

  • @bestmusic4553
    @bestmusic4553 11 หลายเดือนก่อน +4

    А такой вопрос почему при аутентификации мы в поле username вводим email, а при введении зареганного username выходит ошибка?

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

      привет! удалось найти ответ?

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

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

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

    Сначала думал что автор ошибся с синтаксисом моделей БД алхимии. Но нет. Действительно, в последней версии алхимии поля таблицы описываются через Mapped а не Column
    И последняя версия FastApi-Users так же в классе через Mapped описывает.
    Имейте это в виду, и по чаще смотрите доки )

  • @АнастасияКоржак-ф4ы
    @АнастасияКоржак-ф4ы ปีที่แล้ว

    как всегда, спасибо большое!! Все вместе с тобой проделала, все поняла ))

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

    Мощно! Спасибо! С меня лайк и подписка!

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

      Спасибо ;)

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

    40:10 Мы же вход осуществляем по email, верно? А поле называется "username". А где это исправить?

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

      Тоже очень волнует этот вопрос. Если вы уже нашли ответ, поделитесь им, пожалуйста.

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

      удалось найти ответ?

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

      ​@@checkanon6908 в моделях поменяй и сделай миграции, делов то

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

    Отличный формат и подача! Респект автору огромный! однако хотелось бы чуть больше всяких подробностей насчет секьюрности, пусть где и что почитать - и то конкретика)) а то легкий сумбур в голове у меня как у новичка...

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

    Для меня как новичка в программировании, прикольно что простым языком без разных замудростей)) особенно полезны вставки: "это всего лишь ........." тк за громкими названиями как правило прячутся простейшие вещи.

  • @aiornerok3931
    @aiornerok3931 ปีที่แล้ว +4

    А что на счет refresh tokena

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

    Очень интересно! Не смотрел есть ли у тебя на канале более подробно об регистрации, аутентификации и авторизации видео. Какие есть подходы, лучшие практики и т.д. Хотелось бы увидеть такое.

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

    отличное видео, ждем продолжении авторизацию!

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

    Переписал код полностью, запустил, вылезает ошибка "valueerror: invalid literal for int() with base 10: 'None'. Уже достаточно продолжительное время пытаюсь найти ошибку, не подскажешь, что делать?

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

    Скажите а в чем смысл определять юзера два раза? Один раз в models.py через metadata а второй раз в database.py как бы кастомизируя класс User из FastAPI-Users ?

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

      Действительно, смысла в этом нет. Это была моя ошибка. Достаточно оставить класс User с наследованием от Base

  • @through-it
    @through-it 8 หลายเดือนก่อน +4

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

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

      Ты имеешь ввиду не копипастить код , а, например, пользовться методом super()?

  • @ЛангВладислав
    @ЛангВладислав ปีที่แล้ว +7

    Когда создаёшь отдельную директорию/сервис с авторизацией все волки делают ауф 😂
    Не смог удержаться))

  • @ПавелБудай-ы6с
    @ПавелБудай-ы6с ปีที่แล้ว

    Красавчик, классный урок 👍

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

    Видео просто огонь!!!!!

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

    Артём, ты так и не рассказал, что делать, если истекло время жизни cookie!

  • @ВладиславСиницын-ъ4х
    @ВладиславСиницын-ъ4х 4 วันที่ผ่านมา

    Артем, а как данную авторизацию подключить к моему html файлу на бекенде с авторизацией. Есть ли у Вас такой курс?

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

    Артем, спасибо тебе за урок. Но объясни пожалуйста, для чего ты делаешь две одинаковые модельки юзера? Можно ведь создать одну и использовать только ее, не плодя одинаковый код.
    Если я в чем-то не прав и чего-то не понимаю - ответьте :)

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

      Ошибся. Достаточно одной модели

  • @АлександрКостромин-к4х
    @АлександрКостромин-к4х 7 หลายเดือนก่อน

    Артём добра тебе и всех благ! Очень крутое видео!

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

    Будьте внимательны: за username в Сваггере считается электронная почта, а не тот username, который мы ввели в модель. Я долго тупил :)

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

    на счет того что при создании юзера поле role_id было user, а нельзя было бы в модели указать Column('role_id', Integer, ForeignKey(role.c.id), default=1)? Вместо того что бы ковырять библиотеку?

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

      default сработает если при добавлении в базу значение не указанл, а так как в схеме UserCreate клиент может указать значение, то оно попадет в базу. Лучший вариант - исключить поля is_superuser, is_active, is_verified и role_id и использовать аргумент default для базы данных или переназначать эти переменные в обработчике эндпоинта

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

    Артём, вас действительно интересно смотреть но многое в этом видео сделано "ну просто так надо", да с объясненими, но очень сложно если хочется понять всю структуру работы программы, а не на лету, в сумме очень сложно
    UPD: Читайте доки

  • @user-bf6hz5sf9s
    @user-bf6hz5sf9s ปีที่แล้ว +4

    подскажите пожалуйста
    40:08 почему в поле username мы вбиваем почту?
    почему fastapi users по дефолту использует почту в качестве логина для входа?
    можно ли это как то исправить чтобы вместо почты пользователь вбивал свой username?

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

      удалось найти решение?

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

      @@checkanon6908 да я почитал документацию и там разработчики написали что они решили использовать почту как username так как почта это всегда уникальное значение и поэтому точно не будет возникать никаких конфликтов. К сожалению я не понял каким образом можно использовать в качестве username настоящий username. Вроде как нужно что то изменить в коде самой библиотеки но из за этого начинают везде возникать ошибки и конфликты. По этой причине проще просто на фронтенде использовать форму email а в бд записывать данные в username. Звучит костыльно? Но как сделать по другому я не знаю.

  • @БогданДанилин-н9ч
    @БогданДанилин-н9ч ปีที่แล้ว

    давай давай. продолжай в тои же духе. Больше видео

  • @Artem-wk1vn
    @Artem-wk1vn ปีที่แล้ว +2

    Спасибо за урок. А чем вы пользуетесь в продакшене? Разве похожей библиотекой авторизации? Или пишете кастомные доступы по ролям к данным на бекенде?

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

      Раньше на продакшене я пользовался кастомной аутентификацией, для этого курса буду использовать fastapi-users (надеюсь довести проект до прода). Не вижу причин не использовать данную библиотеку, тем более, что ее можно удобно настроить под себя ввиду хорошо задокументированного кода: удалить дефолтные роли active/verified/superuser и добавить свои (или через такие же переменные, или, как делаю я, через таблицу с ролями).
      Конечно, перед выкаткой в прод нужно почитать исходники библиотеки для поиска возможных уязвимостей.

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

    Боооольшое спасибо за уроки.
    Однако сейчас в 'fastapi_users' вместо "Column" используется "mapped_column". Но пока ничего не крякнуло =)

  • @orthodox-chanel
    @orthodox-chanel หลายเดือนก่อน

    c 10й попытки заработало и у меня. Все время после регистраици возвращало ошибку сервера крутил все что можно и так и этак пока в конце не снес всю базу и руками не прописал на чистом sql создание таблиц. Видимо рано мне еще алембик или что-то не так...

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

    Артем, привет! Классная серия уроков, спасибо! Но некоторые вещи, честно говоря, расстраивают. Например, пароль ХЕШируется, а не шифруется. ХЕШ - не обратимая функция, никаким образом пароли не декодируются. На бэке сравниваются их хеши. То есть не пароль декодируется, а в БД хранится хеш и поступающий пароль тоже хешируется. И вот эти хеши сравниваются. И второе, у метода POST нет никакого другого "уровня защиты", он отличается от GET только тем, что пользователь не видит эти переменные в адресной строке и всё.

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

    спасибо за урок больше четырех

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

    А кто-то может подсказть почему при аутентификации поле называется username, а вводить надо email?

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

      Тоже интересно. Вы узнали ответ?

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

    А где можно подробнее познакомится с сессиями? Не совсем понятно для чего то и зачем

  • @АнтонМакаров-ь7в
    @АнтонМакаров-ь7в 6 หลายเดือนก่อน

    16:51 - нехорошо хардкодить id строки в БД. В БД совсем не обязательно роль "обычный пользователь" будет под id=1.
    Несколько раз инициируешь БД и сносишь - id всё время меняются. К ним нельзя привязываться.
    По-хорошему тут надо сделать запрос в БД с поиском id для нужной нам роли. И присвоить этот найденный id.

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

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

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

    Спасибо большое за контент. Продолжай в том же ритме. Желаю многократного увеличения просмотров и подписчиков..

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

    Всем привет! Оч нравится курс, все вроде как доходчиво, но не понимаю я одной штуки.
    Почему мы создаем модель юзера повторно? Или мы в принципе можем удалить модель, которую мы создали ранее и использовать ту, что в фастапи-юзерс?

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

      Все верно, можно использовать модель из fastapi-users. В уроке была допущена ошибка DRY
      Желательно вообще все модели переписать с Table() на классы

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

    Как всегда - красаучыг

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

    хотелось бы больше видео где идёт фулстек разработка, чтобы параллельно всю работу бэкенда одевать в красивый фронтенд

  • @АртемАртеменконезабывайвыходит

    запишешь подробнее про jwt мб даже с подтверждением почты очередями и чтоб с докой сходилось что то очень все туго зашло но интересно

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

    Привет, спасибо за видео! Мб снимешь сравнение fast, rest, soap API, сходства различия и для чего используются?

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

      Привет! Спасибо за предложение, я подумаю

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

    Спасибо за видос. Странное решение позволить пользователям вводить поля типа is_admin. Вместо того чтобы убрать их с реквеста, вы сломали логику сохранения. Надеюсь исправите в будущем.

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

      Согласен, плохая реализация

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

    так тут один токен, а jwt вроде как refresh token предполагает. Где объяснения как refresh работает?)

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

    "detail": "JWTError" в dependencies хотя токены совпадают. В чем может быть дело?

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

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

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

    Для продвижения. Но подача и правда супер

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

      Спасибо

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

      @@artemshumeiko скоро на ваш курс на степике запишусь. 😉

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

    Артем, насчет пересоздания миграции, вы просто удалили миграции и все у вас заработало. У меня получилось только и с удалением таблиц в БД, иначе требовало правило on_delete="CASCAD"

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

      Спасибо. Буду знать

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

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

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

      Планируется ещё около 10 видео. Надеюсь к концу марта все снять

  • @ellipsis_1337
    @ellipsis_1337 21 วันที่ผ่านมา

    Большое спасибо за видео,очень полезно.Один момент:
    Возможно ли в Swagger doc где эндпоинт login поменять название поля с "username" на "email"
    Потому что,вводит в заблуждение разработчика,там по факту поле принимает email,но название username
    Спасибо заранее за ответ

  • @rodnov-kirill
    @rodnov-kirill ปีที่แล้ว

    очень интересно спасибо

  • @ВладимирТалалаев-н3р
    @ВладимирТалалаев-н3р ปีที่แล้ว

    Артём, хорошее дело делаешь! Молодец, продолжай!
    Вопрос по ходу дела. Я понимаю что Python язык не строгой типизации, но все же...
    Если заглянуть в класс SQLAlchemyBaseUserTable
    то можем там увидеть следующий странный код:
    hashed_password: str = Column(String(length=1024), nullable=False)
    is_active: bool = Column(Boolean, default=True, nullable=False)
    is_superuser: bool = Column(Boolean, default=False, nullable=False)
    is_verified: bool = Column(Boolean, default=False, nullable=False)
    Мы говорим что переменная hashed_password имеют тип str, is_active это bool и т.д. и тут же берем и просто назначаем объект с типом "Column"
    Или, мы говорим что у нас id имеет тип int и тут же тоже пихаем в него "Column":
    class User(SQLAlchemyBaseUserTable[int], Base):
    id = Column(Integer, primary_key=True)
    Можете объяснить, для полного понимания, в чем прикол и как это работает?
    Спасибо

    • @vsevolodtetervak257
      @vsevolodtetervak257 ปีที่แล้ว +4

      Привет)
      Немного занудства сначала - питон имеет динамическую сильную типизацию. Динамическая - типы вычисляются в момент выполнения. Сильная - нельзя смешивать разные типы в выражении (нельзя вычесть строку из инта, привет, js)
      Надо понять два момента:
      1. тип через двоеточие после имени переменной:
      hashed_password: str = Column(String(length=1024), nullable=False)
      Это не объявление типа, это подсказка типа. Если будете искать больше информации, то ищите type hinting. Подсказка не накладывает никаких ограничений, по факту в переменной может лежать любой тип. Это именно что подсказка для разработчика (подсказки синтаксические будут от IDE итд)
      2. id имеет тип int и тут же тоже пихаем в него "Column"
      С чего бы начать. Если вкратце - это ORM. Задача ORM - абстрагировать разработчика от работы с БД. Мы используем один и тот же класс для определения таблицы в базе и для работы с объектами в нашей программе. То есть Column нужно для того чтобы библиотека делала корректные запросы при обращении к БД. Когда же мы будем работать с экземпляром класса User в коде, в поле id будет лежать int.
      Для понимания, обратите внимание, как в github.com/artemonsh/fastapi_course/blob/main/Lesson_05/main.py#L43 мы берем поле username экземпляра класса User. И хоть в классе бы объявили это поле как класс Column github.com/artemonsh/fastapi_course/blob/main/Lesson_05/auth/database.py#L21, при обращении к полю username мы получим строку (потому что в базе в колонке username лежит строковое значение).

    • @ВладимирТалалаев-н3р
      @ВладимирТалалаев-н3р ปีที่แล้ว

      @@vsevolodtetervak257
      Привет!)
      Да, вправил мозги, теперь стало гораздо понятнее. Благодарю!

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

    Артем, подскажи как правильней сделать. Есть логин юзера в приложении через JWT и этому юзеру нужно предоставить дополнительно безлимитный по вреимени токен для некоторых операций с API. Как лучше хранить и проверять токен? Хранить в базе и кеше, чтоб каждый раз базу не дергать? Запросов с этим доп токеном может быть много.

  • @ivanstereotekkofficial5353
    @ivanstereotekkofficial5353 28 วันที่ผ่านมา

    Мне очень кажется странным что в реализации этой библиотеки нет модели с refresh_token , хотя копаясь в недрах самой библиотеки я нашел в классе BaseUserManager поле с рефреш токеном. То есть автор полагал что это поле нужное, но в документации эта тема совсем не тронута. И у вас вижу не реализован метод refresh и вы работаете с одним токеном. Может есть объективные причины на это, могли бы сказать почему ?

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

      К моему комментарию выше:
      Фронтенд разработчик на работе погрузил меня в муки сомнений. Он уверенно утверждал что реализация в fastapi-users неправильная! Должно быть два токена refresh & access. Я не первый раз использую fastapi users, но после его слов у меня тревога и ворт в пастели )) Думаю надо написать свою аутентификацию а за одно понять все на молекулярном уровне. Написал ! Понял😊 FastAPI users отличная библиотека!

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

    Идея с ролью для пользователя по умолчанию ясна, но мне кажется прописывать это в виде "1" в коде не очень читаемое и поддерживаемое решение, мало ли как потом базу данных поменяют, или кто будет этот код читать...

  • @АлександрВашурин-г4б
    @АлександрВашурин-г4б 8 หลายเดือนก่อน

    Артем, можно ли реализовать авторизацию и аутентификацию пользователя c помощью FastAPI Users, но без логина и пароля, а с ключом? Просто вместо логина и пароля передавать сгенерированный ключ, например, uuid.

  • @KonstantinKovalenko-d3b
    @KonstantinKovalenko-d3b ปีที่แล้ว

    а роль то почему не меняется? Шлешь 2 получаешь в бд 2, шлешь 1 - в бд тоже 1. Что я пропустил? user_dict['role_id'] = 1 добавлял

  • @АртемАртеменконезабывайвыходит

    кстати очень много с докой не сходиться это такая фича? меня аж немного подгорать начало хотя курс свежий

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

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

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

      на канале уже есть видео fastapi + frontend, называется "Fullstack - это просто". Выходило в начале года, обязательно посмотрите)

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

      @@artemshumeiko поищу, а по никак не могу связать формы регистрации и авторизации на фронте с беком. Если есть возможность - дайте ссылку на видео . спасибо

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

      @@artemshumeiko Это видео Как Связать Бэкенд и Фронтенд? React + FastAPI Full Stack приложение ?

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

      @@Edvardmoskovka да

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

    Артём, спасибо за урок. Сейчас у вас в проекте две ОРМ модели из разных библиотек (psycopg2, asyncpg)? Поясните пожалуйста зачем? Это ведь вылнуждает поддерживать и сихронизировать их вручную

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

      Спасибо за комментарий! Действительно, psycopg2 устанавливался в уроке по Базам Данных, но по ходу развития курса стало ясно, что нет необходимости его использовать. В дальнейшем будет использоваться только asyncpg.
      В следующем уроке я еще обращусь к теме БД и, в частности, SQLAlchemy и особенностей подключения и работы с ней

    • @ЕвгенийЗемляной-д6ф
      @ЕвгенийЗемляной-д6ф ปีที่แล้ว

      @@artemshumeiko По 4 уроку переписал с использованием asyncpg. Все же тоже самое получается? Изменения по сути только в URL - "postgresql+asyncpg" и команде alembic init -t async migrations? Или еще какие-то есть нюансы?

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

      возможно, к URL в конце стоит дописать "?async_fallback=True", как упомянуто в 6 видео

    • @ЕвгенийЗемляной-д6ф
      @ЕвгенийЗемляной-д6ф ปีที่แล้ว

      @@artemshumeiko Я может тогда не так понял. Но разве не так должно быть:
      from sqlalchemy.ext.asyncio import create_async_engine
      engine = create_async_engine("postgresql+asyncpg://user:pass@hostname/dbname")
      (The asyncpg dialect is SQLAlchemy’s first Python asyncio dialect.
      Using a special asyncio mediation layer, the asyncpg dialect is usable as the backend for the SQLAlchemy asyncio extension package.
      This dialect should normally be used only with the create_async_engine() engine creation function:)
      а наоборот перевод в синхронку:
      # for testing purposes only; do not use in production!
      engine = create_engine("postgresql+asyncpg://user:pass@hostname/dbname?async_fallback=true")
      (The dialect can also be run as a “synchronous” dialect within the create_engine() function, which will pass “await” calls into an ad-hoc event loop. This mode of operation is of limited use and is for special testing scenarios only. The mode can be enabled by adding the SQLAlchemy-specific flag async_fallback to the URL in conjunction with create_engine():)

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

      @@ЕвгенийЗемляной-д6ф имелось в виду добавить async_fallback к переменной sqlalchemy.url в файле alembic.ini. Адрес БД в функции create_async_engine менять не нужно

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

    Артём, спасибо за полезную информацию!
    На 11 минуте, а именно в 10:20 ты говоришь "скопируем код" и у тебя в браузере есть значок скопировать код, а у меня ни в Firefox, ни в Chrome нет этой кнопки. Это какой-то плагин к браузеру?

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

      Это кнопка внутри документации позволяет скопировать весь код

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

    А нельзя как-то скрыть параметры булевые при регистрации? Просто в модели дефолтные прописать и все, чтобы при инсерте не ругалась БД? Просто зачем выносить из класса отдельную функцию и переписывать ее, ощущение просто, что это костыль дикий прям и можно красивше)