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

  Переглядів 73,195

Артём Шумейко

Артём Шумейко

День тому

В этом видео мы изучим библиотеку FastAPI Users, научимся регистрировать пользователей и аутентифицировать их; создадим защищенные эндпоинты, доступные только авторизованным пользователям.
Освой backend разработку на FastAPI с НУЛЯ до выхода в продакшн за 3 месяца: clck.ru/38ZcDP
Прочитать отзывы к курсу можно на Stepik: clck.ru/38ZdhZ
Репозиторий на Github с кодом из видео: t.me/artemshumeiko/9
Мой телеграм-канал: t.me/artemshumeiko
Поддержать канал:
Boosty: boosty.to/artemshumeiko
0:00 - Вступление
0:59 - Обзор библиотеки FastAPI Users
2:53 - Способы хранения и передачи токена
9:28 - Установка + подключение к базе данных
20:08 - Что такое Depends в FastAPI
23:15 - Cookie + JWT
25:21 - Управление пользователями (UserManager)
27:18 - Схемы (schemas)
29:27 - Роутеры
32:00 - Кастомизируем менеджера пользователей
37:45 - Регистрация пользователя
39:31 - Аутентификация
42:16 - Создаем защищенный эндпоинт
46:28 - Время поставить лайк и подписаться
#fastapi #python #backend #django #flask #docker #sql #celery #разработка #программирование

КОМЕНТАРІ: 251
@artemshumeiko
@artemshumeiko Рік тому
Освой backend разработку на FastAPI с НУЛЯ до выхода в продакшн за 3 месяца: clck.ru/38ZcDP Прочитать отзывы к курсу можно на Stepik: clck.ru/38ZdhZ
@user-xr1ro9kn9q
@user-xr1ro9kn9q 8 місяців тому
Здравствуйте, а вы можете отдельно сделать видео по созданию кастомного пользователя. Вы говорили в этом видео, что изначально была именно такая идея. Только со всеми мелочами и плюшками. Это очень важно. Если не Вам будет не очень сложно)
@__-fx5gd
@__-fx5gd 2 місяці тому
Здравствуйте! Начал изучать FastAPI по вашему курсу, столкнулся с проблемой: после изменения названия таблиц в модели БД и создания новой ревизии, не могу обновиться до этой ревизии т.к название таблицы не изменяется, а просто создается новая: sqlalchemy.exc.InternalError: удалить объект таблица roles нельзя, так как от него зависят другие объекты.
@artemshumeiko
@artemshumeiko 2 місяці тому
@@__-fx5gd достаточно поменять в миграции код на ALTER TABLE table_name RENAME TO new_table_name, чтобы не удалялась и создавалась таблица
@programming_etc
@programming_etc Рік тому
Я занимаюсь разработкой на python уже почти 5 лет и прекрасно понимаю всё, что ты показываешь в своих видео, но твоя подача всё равно заставляет смотреть до конца. Очень приятная картинка, превью и подача, просто кайф. Желаю тебе успехов и побольше подписчиков для такого годного контента!
@fresh_wind87
@fresh_wind87 11 місяців тому
зачем тогда смотреть когда знаешь?
@Gregory-vc2vs
@Gregory-vc2vs 8 місяців тому
@@fresh_wind87 а как понять, что ты это все знаешь, не посмотрев?
@user-vg3hp6fe6v
@user-vg3hp6fe6v 4 місяці тому
@@Gregory-vc2vs когда знаешь то знаешь что знаешь..хых
@tagabenz9808
@tagabenz9808 4 місяці тому
Прикол в том что кто понимает не очень смотреть не так уж легко
@eva_grin_0941
@eva_grin_0941 Рік тому
Спасибо огромное за такое видео! Всё четко, по полочкам, ничего лишнего, уместные комментарии с объяснениями. Приятно вас слушать и смотреть - обстановка дома приятная и сами вы симпатичный. Надеюсь увидеть ещё больше ваших видео в будущем!
@user-fq1en7yv3z
@user-fq1en7yv3z 11 місяців тому
Потратил пол дня на эту библиотеку, а тут за 40 мин. все по полочкам) Однозначно подписка👍
@griigorievamaria
@griigorievamaria Рік тому
Ура, новое видео! Классный новогодний фон😍
@eugeneyakimenko8843
@eugeneyakimenko8843 Рік тому
Спасибо большое за видео, все очень понятно, интересно и без воды!
@sergeyasdf2677
@sergeyasdf2677 Рік тому
Спасибо большое за курс, очень информативно
@user-fd1kv4kt3t
@user-fd1kv4kt3t Рік тому
Спасибо большое. Наверно самое понятное объяснение из всех видео, которые я пересмотрел
@dmitryrotanin
@dmitryrotanin Рік тому
Спасибо за курс! Подача супер крутая, лучше туториала на русском я не встречал! Артем, ты молодец! Отличная работа, я восхищаюсь и параллельно продолжаю курс!
@VladStone
@VladStone Рік тому
кайф) давно не было видео и думал, что пропал) спасибо!
@bozarmax
@bozarmax Рік тому
Невероятная подача материала. Спасибо большое!
@artemshumeiko
@artemshumeiko Рік тому
Спасибо ;)
@user-nl2mc5le7o
@user-nl2mc5le7o 11 місяців тому
как всегда, спасибо большое!! Все вместе с тобой проделала, все поняла ))
@adammason482
@adammason482 9 місяців тому
Огромное спасибо за урок!
@user-tt9xr9tb1i
@user-tt9xr9tb1i Рік тому
Ооо наконец, ждал этого именно прр юзерс!
@newuser6989
@newuser6989 6 місяців тому
Спасибо за курс, очень помогает вкатиться в бэк =)
@user-yh3to6hl5u
@user-yh3to6hl5u Рік тому
Красавчик, классный урок 👍
@hanmahanma5067
@hanmahanma5067 2 місяці тому
Большое спасибо за ваш курс!
@MariaShakuro
@MariaShakuro 9 місяців тому
Большое спасибо за контент! В русскоязычном сегменте пока самый доступный вариант объяснения
@user-yk4qq4nt7o
@user-yk4qq4nt7o 8 місяців тому
Благодарю за урок, много полезной информации!
@Uhokudon7
@Uhokudon7 7 місяців тому
сердечно благодарю за уроки)
@andrewzh4660
@andrewzh4660 Рік тому
Честно признаться, я давно не был в таком щенячьем восторге от курсов. Помимо самого FastAPI он мне уже покрыл кучу пробелов моих
@egorcherevichin6128
@egorcherevichin6128 2 місяці тому
Очень крутые видео, спасибо за курс
@muhammadumarsotvoldiev9555
@muhammadumarsotvoldiev9555 7 місяців тому
спасибо за ваше старание. Очень полезный контент!
@freemy3778
@freemy3778 Рік тому
Видео просто огонь!!!!!
@zhomartsaiynov1145
@zhomartsaiynov1145 Рік тому
Спасибо тебе большое, Артём! Всё чётко разъяснил за авторизацию 😂 пожалуйста, продолжай пилить видосы дальше🥵 хотел бы увидеть интеграцию с AWS S3
@99phenomenon
@99phenomenon Рік тому
Отличный канал! Как раз решил попробовать FastAPI!
@artemshumeiko
@artemshumeiko Рік тому
Успешного изучения!
@0limjon
@0limjon 9 місяців тому
Спасибо за ролики, хороший старт для изучения FastAPI
@cyber_warrior14
@cyber_warrior14 7 місяців тому
Артем, у вас отличная подача и умение хорошо объяснять сложный материал (что на самом деле, очень редкое качество). Большое вам спасибо за ваши уроки и удачи в работе и развитии канала!
@iforvard
@iforvard Рік тому
При создании хендлера для логина обычно рекомендуется использовать метод POST вместо метода GET. Это связано с тем, что метод GET передает данные формы через URL-адрес, который может быть легко просмотрен и перехвачен злоумышленником. Если пользователь вводит свои учетные данные в форму для входа, используя метод GET, то эти данные будут открыто передаваться в URL-адресе. Это может стать проблемой для безопасности, так как злоумышленник может перехватить эти данные с помощью простого сниффинга или посредника. С другой стороны, при использовании метода POST данные формы передаются в теле запроса, а не в URL-адресе. Это обеспечивает большую безопасность, так как данные не будут открыто передаваться и будут скрыты от посторонних глаз. Поэтому, чтобы обеспечить безопасность пользователей, рекомендуется использовать метод POST для передачи учетных данных при логине.
@user-dt5nz3op8y
@user-dt5nz3op8y 11 місяців тому
GET запрос зашифрован, кроме самого домена и порта
@iforvard
@iforvard 11 місяців тому
@@user-dt5nz3op8y , Шифрование не зависит от типа запроса это зависит от http или https
@user-gl1ot4ic6m
@user-gl1ot4ic6m 6 місяців тому
Спасибо! Очень понятно, преподавательский талант вас не обошел стороной-:)))
@artemshumeiko
@artemshumeiko 6 місяців тому
спасибо :)
@neweternalicon207
@neweternalicon207 5 місяців тому
Спасибо за такой полезный урок!
@artemshumeiko
@artemshumeiko 5 місяців тому
Рад помочь :) Спасибо
@AS-fk5fw
@AS-fk5fw Рік тому
На работе как раз FastAPI, но для пет-проекта в этой же компании не хватает знаний. Спасибо за твой урок, очень ценно! вернусь ещё на канал)
@artemshumeiko
@artemshumeiko Рік тому
Спасибо за отзыв!
@belford123
@belford123 5 місяців тому
Мощно! Спасибо! С меня лайк и подписка!
@artemshumeiko
@artemshumeiko 5 місяців тому
Спасибо ;)
@Temirlan
@Temirlan 5 місяців тому
Спасибо большое!
@rodnov-kirill
@rodnov-kirill Рік тому
очень интересно спасибо
@user-qd9gc9fk1k
@user-qd9gc9fk1k 9 місяців тому
Подскажите пожалуйста, почему при входе требуется ввести username и password, но вместо username мы вводим email?
@user-kk3pt2dj7u
@user-kk3pt2dj7u 11 місяців тому
После джанго так непривычно, что начал понимать тему после третьего просмотра с параллельной практикой, но материал отличный
@hissie3190
@hissie3190 7 місяців тому
Извините, можете подсказать работает ли данная библиотека с mysql?
@viaceslavkiptilov1203
@viaceslavkiptilov1203 Місяць тому
Курсы - логично, практично и фантастично :) СПСБ,!
@user-bf6hz5sf9s
@user-bf6hz5sf9s 7 місяців тому
хотелось бы задать вопрос если мы на 29:08 просто копируем содержимое класса от которого наследуемся тогда зачем нам вообще наследование писать? можно ли вот так написать class UserCreate:?
@cppplus9537
@cppplus9537 3 місяці тому
отличное видео, ждем продолжении авторизацию!
@haskelllisp5998
@haskelllisp5998 Рік тому
Как всегда - красаучыг
@AnatoliyDekorstyle
@AnatoliyDekorstyle 7 місяців тому
Отличный формат и подача! Респект автору огромный! однако хотелось бы чуть больше всяких подробностей насчет секьюрности, пусть где и что почитать - и то конкретика)) а то легкий сумбур в голове у меня как у новичка...
@user-sl6br7uu4q
@user-sl6br7uu4q 9 місяців тому
давай давай. продолжай в тои же духе. Больше видео
@dmitrygusev4522
@dmitrygusev4522 14 днів тому
Артем, большое спасибо за Ваши уроки. С удовольствием постигаю FastAPI. ) Надеюсь , с Вашей помощью , в ближайшее время создать какое-то всое приложение ).
@artemshumeiko
@artemshumeiko 14 днів тому
Спасибо! Успехов вам!
@Filinius1
@Filinius1 Рік тому
Спасибо большое за контент. Продолжай в том же ритме. Желаю многократного увеличения просмотров и подписчиков..
@hugo-onzakorderra8851
@hugo-onzakorderra8851 9 місяців тому
Идентификация - определение пользователя. Аутентификация - проверка принадлежности идентификатора тому пользователю, который этот идентификатор предъявляет. Авторизация - проверка прав пользователя на использование конкретного ресурса.
@user-ye8bz8im3l
@user-ye8bz8im3l 9 місяців тому
Подскажите как в vscode импортировать бибилиотеки через конекстное меню? Что это за расширение?
@user-py6uo4jz9x
@user-py6uo4jz9x 3 місяці тому
Артем, можно ли реализовать авторизацию и аутентификацию пользователя c помощью FastAPI Users, но без логина и пароля, а с ключом? Просто вместо логина и пароля передавать сгенерированный ключ, например, uuid.
@ocean6305
@ocean6305 10 місяців тому
Все повторил по мануалу с документации, правда используя beanie. Почему то не создает cookie. Хотя все остальное отрабатывает как надо. Не могу понять в чем проблема. Может ли быть дело в том что база и бэк развернуты в докере?
@cosm1cavenger239
@cosm1cavenger239 8 місяців тому
спасибо за урок больше четырех
@user-hc1zb7uz7k
@user-hc1zb7uz7k 2 місяці тому
вопрос получается мы два раза дублируем табличку один раз в модели для самой автризации второй раз в файле создания миграций для создания таблички в бд? как то это можно автоматизировать?
@alekseyveld7559
@alekseyveld7559 Рік тому
Артём, ОГРОМНОЕ СПАСИБО ЗА ЭТО ВИДЕО! Ты создаешь очень годный контент и рассказываешь о том, что сейчас не найти на UKposts. Расскажи пожалуйста про Fastapi-admin или Starlette-admin или про любую админку которую использую с Fastapi. СПАСИБО!
@artemshumeiko
@artemshumeiko Рік тому
Спасибо за комментарий! Наверное, через несколько видео будет материал про админку
@AS-fk5fw
@AS-fk5fw Рік тому
@@artemshumeiko круто! я по ключевому слову fastapi admin попал на канал
@dj4ng0_mk
@dj4ng0_mk 3 дні тому
6 лет на джанге сижу, хочу на фастапи перебираться. Вижу только плюсы пока. Из минусов наверно то, что нет админки встроенной и то, что от orm нужно отучаться и привыкать к алхимии. Буду своё приложение переписывать на фастапи. Короче, спасибо Артём. Лайкос.
@artemshumeiko
@artemshumeiko 3 дні тому
удачи вам!
@aiornerok3931
@aiornerok3931 Рік тому
А что на счет refresh tokena
@vadim7634
@vadim7634 Рік тому
Артем, подскажи как правильней сделать. Есть логин юзера в приложении через JWT и этому юзеру нужно предоставить дополнительно безлимитный по вреимени токен для некоторых операций с API. Как лучше хранить и проверять токен? Хранить в базе и кеше, чтоб каждый раз базу не дергать? Запросов с этим доп токеном может быть много.
@gusevsky
@gusevsky 10 місяців тому
Для меня как новичка в программировании, прикольно что простым языком без разных замудростей)) особенно полезны вставки: "это всего лишь ........." тк за громкими названиями как правило прячутся простейшие вещи.
@nameless_nameless
@nameless_nameless Рік тому
Боооольшое спасибо за уроки. Однако сейчас в 'fastapi_users' вместо "Column" используется "mapped_column". Но пока ничего не крякнуло =)
@Zloy_Sereja
@Zloy_Sereja 2 місяці тому
а как воспользоваться api с аутентификацией не используя swagger? В сваггере всё хорошо, но если пытаться отправить логин и пароль через request, то получается 400ая ошибка, типа я не то отправляю. С остальными эндпоинтами таких проблем нет. Как я понимаю там нужно этот логин и пароль во что-то завернуть, но не могу понять как
@Artem-wk1vn
@Artem-wk1vn Рік тому
Спасибо за урок. А чем вы пользуетесь в продакшене? Разве похожей библиотекой авторизации? Или пишете кастомные доступы по ролям к данным на бекенде?
@artemshumeiko
@artemshumeiko Рік тому
Раньше на продакшене я пользовался кастомной аутентификацией, для этого курса буду использовать fastapi-users (надеюсь довести проект до прода). Не вижу причин не использовать данную библиотеку, тем более, что ее можно удобно настроить под себя ввиду хорошо задокументированного кода: удалить дефолтные роли active/verified/superuser и добавить свои (или через такие же переменные, или, как делаю я, через таблицу с ролями). Конечно, перед выкаткой в прод нужно почитать исходники библиотеки для поиска возможных уязвимостей.
@bestmusic4553
@bestmusic4553 7 місяців тому
А такой вопрос почему при аутентификации мы в поле username вводим email, а при введении зареганного username выходит ошибка?
@checkanon6908
@checkanon6908 5 місяців тому
привет! удалось найти ответ?
@user-yo4nd6tm1h
@user-yo4nd6tm1h 5 місяців тому
Автор красавчик так-то. Очень хорошо доносишь материал, но правда на сегодняшний день FastAPI Users изменили тот код который мы сначала скопировали не думая, а потом задумались, по этому в итоге вообще ничего не понятно касательно класса, приходится переписывать как было у автора. Теперь там не Column а Mapped...
@sikirey4151
@sikirey4151 17 днів тому
Здравствуйте, я установил pip install 'fastapi-users[sqlalchemy]' ,но PyCharm не видит эту библиотеку
@AlexandrSpirit
@AlexandrSpirit 7 місяців тому
Сначала думал что автор ошибся с синтаксисом моделей БД алхимии. Но нет. Действительно, в последней версии алхимии поля таблицы описываются через Mapped а не Column И последняя версия FastApi-Users так же в классе через Mapped описывает. Имейте это в виду, и по чаще смотрите доки )
@dunker4495
@dunker4495 7 місяців тому
Артём, ты так и не рассказал, что делать, если истекло время жизни cookie!
@user-bf6hz5sf9s
@user-bf6hz5sf9s 7 місяців тому
подскажите пожалуйста 40:08 почему в поле username мы вбиваем почту? почему fastapi users по дефолту использует почту в качестве логина для входа? можно ли это как то исправить чтобы вместо почты пользователь вбивал свой username?
@checkanon6908
@checkanon6908 5 місяців тому
удалось найти решение?
@user-bf6hz5sf9s
@user-bf6hz5sf9s 5 місяців тому
@@checkanon6908 да я почитал документацию и там разработчики написали что они решили использовать почту как username так как почта это всегда уникальное значение и поэтому точно не будет возникать никаких конфликтов. К сожалению я не понял каким образом можно использовать в качестве username настоящий username. Вроде как нужно что то изменить в коде самой библиотеки но из за этого начинают везде возникать ошибки и конфликты. По этой причине проще просто на фронтенде использовать форму email а в бд записывать данные в username. Звучит костыльно? Но как сделать по другому я не знаю.
@fedosikDvaNulya
@fedosikDvaNulya 11 місяців тому
Делаю все по видео. Версию ту же поставил. Регистрируюсь, логинюсь... Везде статусы 200. Но в куках JWT токена не вижу, кто-нибудь сталкивался?
@hunterxvov4ik
@hunterxvov4ik 2 місяці тому
годнота
@dmitryavdoshin9539
@dmitryavdoshin9539 8 місяців тому
Классная либа, но вот оч неприятно что ради изменения того же самого тела ответа на аунтификациюи или валидацию полей при регистрации надо оверрайдить базовые методы, либо же через мидлварь решать такое
@cfhel1
@cfhel1 6 місяців тому
Будьте внимательны: за username в Сваггере считается электронная почта, а не тот username, который мы ввели в модель. Я долго тупил :)
@ivanstereotekkofficial5353
@ivanstereotekkofficial5353 Рік тому
Скажите а в чем смысл определять юзера два раза? Один раз в models.py через metadata а второй раз в database.py как бы кастомизируя класс User из FastAPI-Users ?
@artemshumeiko
@artemshumeiko Рік тому
Действительно, смысла в этом нет. Это была моя ошибка. Достаточно оставить класс User с наследованием от Base
@righteoushippie
@righteoushippie 9 місяців тому
Артём, спасибо за полезную информацию! На 11 минуте, а именно в 10:20 ты говоришь "скопируем код" и у тебя в браузере есть значок скопировать код, а у меня ни в Firefox, ни в Chrome нет этой кнопки. Это какой-то плагин к браузеру?
@artemshumeiko
@artemshumeiko 9 місяців тому
Это кнопка внутри документации позволяет скопировать весь код
@ivanstasevich
@ivanstasevich 5 місяців тому
10:10 ауф)
@Deflexar
@Deflexar 9 місяців тому
Спасибо большое, но у меня проблема возникла. Нового пользователя регистрирую, всё хорошо, запись в БД создаётся. А когда пытаюсь авторизовать его, то почему то код 204 возвращается. Как я понял, нужно прописать что бы возвращался какой нибудь ответ после авторизации?
@user-nm5ld9vr3k
@user-nm5ld9vr3k 7 місяців тому
@@ibra_vugarЕсли вы как и я в докере работали, то на 0.0.0.0:8000 Куки не сохранялись. Работает только на 127... Пока не нашел, как изменить такое поведение
@soldiertoy
@soldiertoy Рік тому
Здравствуйте, подскажите, пожалуйста, серия из скольки роликов примерно планируется и когда выйдет последний? Спасибо за контент!
@artemshumeiko
@artemshumeiko Рік тому
Планируется ещё около 10 видео. Надеюсь к концу марта все снять
@user-vf7pc4tn9z
@user-vf7pc4tn9z 10 місяців тому
запишешь подробнее про jwt мб даже с подтверждением почты очередями и чтоб с докой сходилось что то очень все туго зашло но интересно
@seduelgames8765
@seduelgames8765 Місяць тому
Очень интересно! Не смотрел есть ли у тебя на канале более подробно об регистрации, аутентификации и авторизации видео. Какие есть подходы, лучшие практики и т.д. Хотелось бы увидеть такое.
@maksimmatantsev8105
@maksimmatantsev8105 11 місяців тому
Артем, спасибо тебе за урок. Но объясни пожалуйста, для чего ты делаешь две одинаковые модельки юзера? Можно ведь создать одну и использовать только ее, не плодя одинаковый код. Если я в чем-то не прав и чего-то не понимаю - ответьте :)
@artemshumeiko
@artemshumeiko 11 місяців тому
Ошибся. Достаточно одной модели
@egorshuraev3116
@egorshuraev3116 11 місяців тому
Здравствуйте, Артем! Подскажите пожалуйста, у меня работает unprotected_route, но protected всегда выдает 401. Я так понимаю это связано с тем, что у меня не сохраняются куки, потому что в консоли отображаются только куки pga4_session, но не JWT. При этом авторизация проходит успешно, выдает код 204, но она как будто не сохраняется. Скажите пожалуйста, в какое место кода мне смотреть, чтобы это исправить?
@user-rz2mf9un8o
@user-rz2mf9un8o 10 місяців тому
Решил проблему?
@egorshuraev3116
@egorshuraev3116 10 місяців тому
@@user-rz2mf9un8o Нет, не понимаю даже как загуглить такое, перепроверил код, скопировал из репозитория даже, все равно не выходит, при этом ошибок не выдаёт pycharm в терминале никаких
@user-rz2mf9un8o
@user-rz2mf9un8o 10 місяців тому
@@egorshuraev3116 я решил ошибку, проверь на каком адресе работает твой сайт. У меня работала на 0.0.0.0:8000 что то твоей а куки сохранялись на 127….. что то там не помню - стандартный, после смены на него проблема решилась
@tony_jin
@tony_jin Рік тому
Привет, спасибо за видео! Мб снимешь сравнение fast, rest, soap API, сходства различия и для чего используются?
@artemshumeiko
@artemshumeiko Рік тому
Привет! Спасибо за предложение, я подумаю
@rozoomcool
@rozoomcool 7 днів тому
зачем на сущности и таблицы? разве это не усложнит разработку, когда их станет больше десяти? При каждой миграции я должен буду позаботиться обо всех изменениях?
@santex85
@santex85 9 місяців тому
Для продвижения. Но подача и правда супер
@artemshumeiko
@artemshumeiko 9 місяців тому
Спасибо
@santex85
@santex85 9 місяців тому
@@artemshumeiko скоро на ваш курс на степике запишусь. 😉
@user-vf7pc4tn9z
@user-vf7pc4tn9z 10 місяців тому
покажешь как парсить b4b selenium с fast api и rabiitmq ? мб еще там платежки всякие атентификация с другими сервисами типа гугл фейсбук твитер тикток и тд мб какойто телегарм бот или интернет магазин даже или парсеро соц сетей
@IgorVin1988
@IgorVin1988 Рік тому
40:10 Мы же вход осуществляем по email, верно? А поле называется "username". А где это исправить?
@Leks_bezdar
@Leks_bezdar 10 місяців тому
Тоже очень волнует этот вопрос. Если вы уже нашли ответ, поделитесь им, пожалуйста.
@checkanon6908
@checkanon6908 5 місяців тому
удалось найти ответ?
@Ilugar
@Ilugar 2 місяці тому
​@@checkanon6908 в моделях поменяй и сделай миграции, делов то
@user-nl2mc5le7o
@user-nl2mc5le7o 11 місяців тому
Артём, может ты сможешь помочь))) Не могу разобраться, как регистрировать в pgadmine 4 сервер в портом не 5432. Если пробую задать другой, то не дает...
@artemshumeiko
@artemshumeiko 11 місяців тому
Для этого нужно запустить еще один экземпляр базы, это трудоемкий процесс. Лучше и легче создать еще одну базу данных на уже имеющемся порту и работать с ней
@user-nl2mc5le7o
@user-nl2mc5le7o 11 місяців тому
@@artemshumeiko спасибо!! а то я уже успела перепробовать разное и только угробила сервера 😁
@user-lw1ov2os1g
@user-lw1ov2os1g 2 місяці тому
Артём добра тебе и всех благ! Очень крутое видео!
@artemshumeiko
@artemshumeiko 2 місяці тому
Спасибо!
@viciouscircle4307
@viciouscircle4307 Рік тому
Всем привет! Оч нравится курс, все вроде как доходчиво, но не понимаю я одной штуки. Почему мы создаем модель юзера повторно? Или мы в принципе можем удалить модель, которую мы создали ранее и использовать ту, что в фастапи-юзерс?
@artemshumeiko
@artemshumeiko Рік тому
Все верно, можно использовать модель из fastapi-users. В уроке была допущена ошибка DRY Желательно вообще все модели переписать с Table() на классы
@user-bv1xw5vl6x
@user-bv1xw5vl6x 13 днів тому
Артем, добрый день. У меня тут в коде ошибка атрибутов type object ‘CookieTransport’ has no attributute ‘scheme’ Подскажите, пожалуйста, как исправить ее можно
@user-bv1xw5vl6x
@user-bv1xw5vl6x 13 днів тому
Поправил В файле authentificator убрал .scheme в _get_dependency_signature -> try -> for backends in self.backends -> Parameter -> default
@user-lm8cb9rd3v
@user-lm8cb9rd3v Рік тому
Артём, хорошее дело делаешь! Молодец, продолжай! Вопрос по ходу дела. Я понимаю что 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 Рік тому
Привет) Немного занудства сначала - питон имеет динамическую сильную типизацию. Динамическая - типы вычисляются в момент выполнения. Сильная - нельзя смешивать разные типы в выражении (нельзя вычесть строку из инта, привет, 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 лежит строковое значение).
@user-lm8cb9rd3v
@user-lm8cb9rd3v Рік тому
@@vsevolodtetervak257 Привет!) Да, вправил мозги, теперь стало гораздо понятнее. Благодарю!
@iMkhl
@iMkhl Рік тому
Артём, спасибо за урок. Сейчас у вас в проекте две ОРМ модели из разных библиотек (psycopg2, asyncpg)? Поясните пожалуйста зачем? Это ведь вылнуждает поддерживать и сихронизировать их вручную
@artemshumeiko
@artemshumeiko Рік тому
Спасибо за комментарий! Действительно, psycopg2 устанавливался в уроке по Базам Данных, но по ходу развития курса стало ясно, что нет необходимости его использовать. В дальнейшем будет использоваться только asyncpg. В следующем уроке я еще обращусь к теме БД и, в частности, SQLAlchemy и особенностей подключения и работы с ней
@user-gv4gp8we6u
@user-gv4gp8we6u Рік тому
@@artemshumeiko По 4 уроку переписал с использованием asyncpg. Все же тоже самое получается? Изменения по сути только в URL - "postgresql+asyncpg" и команде alembic init -t async migrations? Или еще какие-то есть нюансы?
@artemshumeiko
@artemshumeiko Рік тому
возможно, к URL в конце стоит дописать "?async_fallback=True", как упомянуто в 6 видео
@user-gv4gp8we6u
@user-gv4gp8we6u Рік тому
@@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 Рік тому
@@user-gv4gp8we6u имелось в виду добавить async_fallback к переменной sqlalchemy.url в файле alembic.ini. Адрес БД в функции create_async_engine менять не нужно
@user-vf7pc4tn9z
@user-vf7pc4tn9z 10 місяців тому
кстати очень много с докой не сходиться это такая фича? меня аж немного подгорать начало хотя курс свежий
@stepankokovin7841
@stepankokovin7841 Рік тому
Шикарные видео! Такой вопрос: схема с куками работает только для браузера или можно использовать как ручку для любого приложения?
@artemshumeiko
@artemshumeiko Рік тому
Можно использовать вне браузера. Единственное, что придется с каждым запросом передавать cookie
@stepankokovin7841
@stepankokovin7841 Рік тому
@@artemshumeiko Спасибо!
@fugitiveom
@fugitiveom 6 місяців тому
Артем, привет! Классная серия уроков, спасибо! Но некоторые вещи, честно говоря, расстраивают. Например, пароль ХЕШируется, а не шифруется. ХЕШ - не обратимая функция, никаким образом пароли не декодируются. На бэке сравниваются их хеши. То есть не пароль декодируется, а в БД хранится хеш и поступающий пароль тоже хешируется. И вот эти хеши сравниваются. И второе, у метода POST нет никакого другого "уровня защиты", он отличается от GET только тем, что пользователь не видит эти переменные в адресной строке и всё.
@user-ei1by3ye6o
@user-ei1by3ye6o Місяць тому
16:51 - нехорошо хардкодить id строки в БД. В БД совсем не обязательно роль "обычный пользователь" будет под id=1. Несколько раз инициируешь БД и сносишь - id всё время меняются. К ним нельзя привязываться. По-хорошему тут надо сделать запрос в БД с поиском id для нужной нам роли. И присвоить этот найденный id.
@user-mh1hs1by6e
@user-mh1hs1by6e 10 місяців тому
А кто-то может подсказть почему при аутентификации поле называется username, а вводить надо email?
@Leks_bezdar
@Leks_bezdar 10 місяців тому
Тоже интересно. Вы узнали ответ?
@user-mx9pu5fb6v
@user-mx9pu5fb6v Рік тому
Про 4+ слов в комментарии откуда информация?) Или это предположение?
@artemshumeiko
@artemshumeiko Рік тому
Ходят слухи, что алгоритмы ютуба требуют длинные комментарии
@zoree2684
@zoree2684 9 місяців тому
на счет того что при создании юзера поле role_id было user, а нельзя было бы в модели указать Column('role_id', Integer, ForeignKey(role.c.id), default=1)? Вместо того что бы ковырять библиотеку?
@asburdransomnickname
@asburdransomnickname 7 місяців тому
default сработает если при добавлении в базу значение не указанл, а так как в схеме UserCreate клиент может указать значение, то оно попадет в базу. Лучший вариант - исключить поля is_superuser, is_active, is_verified и role_id и использовать аргумент default для базы данных или переназначать эти переменные в обработчике эндпоинта
@ibrahimoglu
@ibrahimoglu Рік тому
👍
@ivanstasevich
@ivanstasevich 5 місяців тому
про нейминг не совсем так. класс действительно будет user, то таблицу можно называть users, это не является чем-то плохим
@lovi3410
@lovi3410 11 місяців тому
Артём, вас действительно интересно смотреть но многое в этом видео сделано "ну просто так надо", да с объясненими, но очень сложно если хочется понять всю структуру работы программы, а не на лету, в сумме очень сложно UPD: Читайте доки
FastAPI - Роутеры и Файловая Структура #6
43:03
Артём Шумейко
Переглядів 40 тис.
Микросервисы - Простым Языком на Понятном Примере
19:08
Пескоструйный АППАРАТ! #shorts
01:00
Гараж 54
Переглядів 1 млн
Спектакль для окупантів та ждунів 🤯
00:47
Радіо Байрактар
Переглядів 502 тис.
10 Minutes To Escape Or This Room Explodes!
10:00
MrBeast
Переглядів 64 млн
Software developer at 38: No Country For Old Men?
5:35
Денис Игнатенко
Переглядів 16 тис.
FastAPI - Базы данных и миграции Alembic #4
27:23
Артём Шумейко
Переглядів 77 тис.
FastAPI ТОП Библиотек и Расширений [2024]
12:21
Артём Шумейко
Переглядів 12 тис.
FastAPI - Зачем учить FastAPI? #0
5:51
Артём Шумейко
Переглядів 115 тис.
Пескоструйный АППАРАТ! #shorts
01:00
Гараж 54
Переглядів 1 млн