FastAPI - Как использовать Depends #14

Артём Шумейко
5 Mar 202323:49

Summary

TLDRВ этом видео Артем Гай рассматривает реализацию инъекций зависимостей в FastAPI, используя 6 примеров для наглядности. Он объясняет, как управлять временными соединениями с базами данных, добавлять пагинацию и передавать параметры через зависимости. Артем также демонстрирует, как использовать классы для передачи параметров и реализует аутентификацию пользователей с помощью зависимостей. Он подробно проходит по каждому примеру, чтобы помочь зрителям понять, как инъекция зависимостей может упростить и усилить код. В заключение, Артем дает советы о том, как правильно использовать зависимости для аутентификации и авторизации в FastAPI.

Takeaways

  • 😀 Артем Гай — разработчик, который помогает погружаться в мир Python и FastAPI.
  • 🔍 В видео рассматривается реализация инъекций зависимостей в FastAPI, включая 6 примеров.
  • 📝 Артем напоминает о важности вступления в сообщества для общения, обучения и поддержки.
  • 🔑 Обсуждается использование контекстных менеджеров и сессий для управления временными соединениями, такими как базы данных.
  • 📚 Приводится пример использования функций с аргументами, которые не принимают параметров, для упрощения кода.
  • 🔄 Рассматривается тема пагинации и передачи параметров запросов, таких как 'limit' и 'skip', через зависимости.
  • 🛡️ Артем демонстрирует, как использовать классы для реализации аутентификации и авторизации пользователей.
  • 👮‍♂️ Показан пример использования 'Guard' для защиты определенных эндпоинтов от неавторизованного доступа.
  • 🔗 Обсуждается использование экземпляров классов в качестве зависимостей для централизованного управления логикой.
  • 🔒 Примеры демонстрируют, как FastAPI использует 'request' для обработки данных пользователя и аутентификации.
  • 🎓 В видео упоминается платный курс Артема, который будет более структурированным и включать дополнительные темы, такие как мониторинг и Docker.

Q & A

  • Что означает аббревиатура 'DPS' в контексте видео?

    -В контексте видео 'DPS' может обозначать 'Data Processing System' или 'Database Processing System', относящуюся к обработке данных или работе с базами данных.

  • Какие примеры реализации 'Dance' рассматриваются в видео?

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

  • Что такое 'контекстный менеджер' и как он используется в видео?

    -Контекстный менеджер - это механизм Python, который управляет временем жизни объекта, часто используяся с синхронными функциями для управления ресурсами, такими как сессии в базе данных.

  • Какие проблемы могут возникнуть при повторном использовании кода для параметров в различных точках API?

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

  • Какие типы параметров могут быть переданы через зависимость в FastAPI?

    -В видео упоминается, что параметры, такие как 'limit' и 'skip' для пагинации, могут быть переданы через зависимость в FastAPI в виде словаря.

  • Что такое 'FastAPI' и как он используется в видео?

    -FastAPI - это современная высокопроизводительная веб-фреймворк для Python, используемый в видео для создания API и управления зависимостями в приложении.

  • Какие преимущества предлагает использование зависимостей в FastAPI для передачи параметров?

    -Использование зависимостей в FastAPI позволяет централизовать логику передачи параметров, уменьшая повторение кода и ошибок, а также упрощая процесс изменения параметров в будущем.

  • Что такое 'аутентификация пользователя' и как она реализуется в видео?

    -Аутентификация пользователя - это процесс проверки личности пользователя в системе. В видео аутентификация реализуется через защитника (guard), который проверяет наличие 'супержавок' (возможно, 'токенов доступа') в запросе.

  • Какие типы объектов могут быть использованы для реализации зависимостей в FastAPI?

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

  • Какие действия предпринимаются, если в запросе отсутствуют необходимые 'супержавки'?

    -Если в запросе отсутствуют необходимые 'супержавки', то система вызывает ошибку, обычно с HTTP-кодом 403, что означает 'Запрещено', и блокирует доступ к защищенным ресурсам.

Outlines

00:00

😀 Введение в реализацию инъекций зависимостей в FastAPI

Артем Гай представляет видео о реализации инъекций зависимостей в FastAPI. Он объясняет, что будут рассматривать 6 примеров реализации и уделит внимание конкретному использованию для аутентификации пользователей. Артем также напоминает зрителям о существовании сообщества в Telegram для общения и обмена опытом в области работы с Python. В заключение, он предлагает поддержать его на Patreon, если возможно.

05:04

📚 Пример реализации сессий с использованием контекстных менеджеров

В этом параграфе рассматривается пример использования контекстных менеджеров для управления сессиями в базе данных. Автор объясняет, как функция 'get_session' может быть использована для предоставления сессии, с которой затем можно работать в точке входа. Он подчёркивает важность вызова этой функции перед началом работы с сессией и демонстрирует базовый пример использования сессии в синхронной функции.

10:06

🔄 Реализация пагинации с помощью зависимостей

Артем демонстрирует, как можно реализовать пагинацию без повторения кода, используя зависимости в FastAPI. Он предлагает создать функцию, которая будет принимать параметры пагинации, такие как 'limit' и 'skip', и передавать их в виде словаря. Таким образом, эти параметры станут доступны во всех точках входа, что упрощает процесс и уменьшает вероятность ошибок.

15:07

🛡️ Использование классов для реализации аутентификации

В этом разделе Артем рассматривает использование классов для управления аутентификацией пользователей. Он объясняет, как можно создать класс 'Guard', который будет отвечать за проверку прав доступа пользователя. Пример кода демонстрирует, как можно использовать экземпляр класса для защиты конкретных функций API, чтобы неавторизованные пользователи не могли получить доступ к ним.

20:08

🔑 Пример использования зависимостей для защитыendpoint'ов

Артем продолжает тему аутентификации, демонстрируя, как можно использовать зависимости для защиты endpoint'ов. Он рассматривает пример, где для доступа к функции 'get_payments' требуются определенные права пользователя, и использует экземпляр класса для реализации этой логики. Также он объясняет, как работает метод '__call__' при вызове экземпляра класса.

🔒 Расширение функциональности FastAPI с помощью кастомных зависимостей

В заключительном параграфе Артем демонстрирует, как можно расширить функциональность FastAPI, используя кастомные зависимости. Он рассматривает пример аутентификации, где используется зависимость 'get_current_user', которая извлекает информацию о текущем пользователе из токена. Артем также упоминает о платном курсе, который он готовит, где будет подробно рассмотрена эта и другие темы.

Mindmap

Keywords

💡инъекция зависимостей

Инъекция зависимостей - это техника программирования, при которой зависимости объектов устанавливаются вручную, вне объекта, а не внутри него. В контексте видео это означает, что при создании объектов или вызове функций, их зависимости (другие объекты или функции, которые они нуждаются) передаются им снаружи. Это позволяет создавать более гибкие и тестируемые программы. В видео инъекция зависимостей используется для управления сессиями, базами данных и аутентификацией пользователей.

💡Dance

Dance в видео является сокращением от 'FastAPI', который является современным фреймворком для создания API на языке Python. FastAPI поддерживает инъекцию зависимостей и используется для разработки веб-приложений. В видео автор демонстрирует, как инъекция зависимостей работает в FastAPI, предоставляя примеры и объясняя их использование.

💡аутентификация пользователей

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

💡контекстный менеджер

Контекстный менеджер в Python - это объект, который поддерживает определенный ресурс во время выполнения блока кода и освобождает его при завершении блока. В видео контекстный менеджер используется для управления сессиями баз данных, обеспечивая, что ресурсы корректно закрываются после завершения операции.

💡FastAPI

FastAPI является современным веб-фреймворком на языке Python, который обеспечивает высокопроизводительное и асинхронное выполнение кода. В видео FastAPI используется для создания API, демонстрируя при этом использование инъекции зависимостей и аутентификации для защиты доступа к данным.

💡асинхронная функция

Асинхронная функция в Python позволяет выполнять код, который не блокирует выполнение других операций. В контексте видео это означает, что функции, обрабатывающие запросы, могут работать параллельно, что увеличивает производительность веб-приложения. Примером может быть асинхронный доступ к базе данных или обработка запросов от пользователей.

💡пагинация

Пагинация - это метод разделения выводимых данных на страницы для удобства пользователя. В видео автор объясняет, как реализовать пагинацию для вывода данных, используя параметры 'limit' и 'skip', которые передаются через инъекцию зависимостей, и тем самым упрощая код и избегая повторений.

💡токен

Токен в контексте веб-разработки - это уникальный идентификатор, который используется для аутентификации и авторизации пользователей. В видео токен используется для защиты доступа к определенным действиям, например, для получения списка платежей, доступ к которым разрешен только для администраторов.

💡HTTP-исключение

HTTP-исключение - это тип ошибки, которая возникает в ходе работы с веб-сервером и связана с некорректным HTTP-запросом. В видео автор упоминает использование HTTP-исключений для обработки ошибок, таких как отсутствие токена или недостаточно прав доступа, возвращая соответствующий статус код и сообщение об ошибке.

💡декодирование токена

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

Highlights

Артем Гай обсуждает реализацию инъекций зависимостей в FastAPI.

Планируется рассмотрение 6 примеров реализации для лучшего понимания темы.

Видео поможет зрителям без остатков разобраться в использовании инъекций зависимостей.

Будет рассмотрена тема кастомной аутентификации пользователей.

Артем напомнит зрителям о своей профессиональной деятельности и обществе в Telegram.

Подходы к работе с базами данных и синхронными сессиями на FastAPI.

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

Пример реализации Dance с использованием временных соединений с базами данных.

Разбор использования параметров в FastAPI для добавления функциональности, например, пагинации.

Артем демонстрирует, как передавать параметры с помощью зависимостей в FastAPI.

Обсуждение использования классов для реализации зависимостей и их преимуществ.

Пример использования классов для добавления логики и параметров в FastAPI.

Артем рассматривает защиту эндпоинтов с использованием экземпляров классов.

Введение в работу с аутентификацией и авторизацией пользователей в FastAPI.

Разбор примера реализации аутентификации с использованием супер-куки и токенов.

Анализ внутреннего устройства FastAPI для понимания работы с зависимостями и аутентификацией.

Обсуждение распространения настроек безопасности на все эндпоинты с использованием роутеров в FastAPI.

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

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

Transcripts

play00:00

хаю-хай с вами Артем Гай и сегодня мы

play00:03

посмотрим на реализацию инъекций

play00:05

зависимости в остапе Да конкретно на

play00:08

Dance вы могли видеть это где-то в коде

play00:10

у меня

play00:11

мы разберемся что это мы посмотрим на 6

play00:15

примеров реализации и вы поймете к концу

play00:18

видео как это используется не будет вас

play00:21

никаких вопросов и А если будет Пишите в

play00:23

комментарии

play00:25

и мы посмотрим как Вишенка в конце видео

play00:27

как использовать для

play00:31

аутентификации пользователей Да многие

play00:33

просили кастомная аутентификация и мы

play00:36

посмотрим немножко на это дело перед

play00:38

началом напоминаю я Артем поэтому

play00:42

разработчик и помогаю вам погружаться

play00:43

Фаста и мир пайтона Не забывайте

play00:46

вступать в icon сообщества в телеграме

play00:48

там мы общаемся друг с другом помогаем

play00:50

друг другу обсуждаем там работа

play00:52

стажировки тестовые задания и

play00:54

поддерживайте меня на бусте Если у вас

play00:56

есть такая возможность

play00:57

поехали Итак начнем мы с примера что уже

play01:01

был у меня видео чтобы как-то освежить

play01:03

нам память

play01:05

меня к сожалению нет его под рукой Ну

play01:07

постарайтесь вспомнить Мы работали с

play01:09

базой данных и у нас была синхронная

play01:12

сессия и там была такая функция

play01:14

по типу осинк Саша

play01:18

Гетто Sensation и у нас был какой-то

play01:22

контекстный менеджер там Осинка Саша

play01:24

Мейкер и он нам отдавал сессию вот таким

play01:26

образом

play01:27

Да ну под сессия Пускай здесь будет

play01:29

что-нибудь

play01:31

просто строчка и Он отдавал сессию чтобы

play01:34

мы могли в поинте работать с этой

play01:37

сессией Давайте напомню напишу базовый

play01:39

Point

play01:40

допустим там Get iTunes и у нас было

play01:44

синхронная функция

play01:46

и здесь принималось вот эта сессия

play01:49

DPS Get Session причем очень важно здесь

play01:53

мне сразу дополнил вызвал эту функцию

play01:57

здесь конечно вызывать не нужно

play01:59

Давайте импортируем

play02:01

ее импортируем с постами

play02:04

и Да тут на что-то было не очень важно

play02:07

как-то севший на языке

play02:09

допустим там возвращали какие-то

play02:13

Не суть важно такой Таким образом мы

play02:17

использовали

play02:19

но я не объяснил что он делает да Или

play02:22

объяснил как-то плохо

play02:24

Что происходило в данном случае

play02:26

во-первых если вы не знакомы с хиллд то

play02:28

он отдает нам контроль на некоторое

play02:31

время Да он работает часто в связке с

play02:34

контекстными менеджерами и контекты

play02:38

менеджер что-то там нам елдилась сессия

play02:40

и мы в поинте работали с этой сессией И

play02:43

как только мы отдавали ответ

play02:45

пользователю сессия возвращался контроль

play02:47

вот в эту функцию и уничтожалось

play02:51

так вот первый пример реализации Dance

play02:53

это использование каких-то временных

play02:57

соединений Да это может быть базой

play02:58

данных с

play03:01

Radisson еще какой-то другой базой

play03:02

данных

play03:04

чтобы был контроль на некоторое время

play03:07

Это первый пример вот мы здесь можем

play03:09

посмотреть что такое например через

play03:12

обычный принт

play03:14

Давайте Сначала посмотрим как у нас

play03:17

выглядят доки

play03:19

У нас есть здесь нет никаких параметров

play03:22

абсолютно Почему Потому что

play03:25

вот эта функция которая вызывается она

play03:28

не принимает параметров

play03:30

и мы можем сделать экзотики У нас тут

play03:32

все вернется Отлично но что произойдет

play03:34

под капотом запретела сессия просто наша

play03:37

строчка

play03:38

Давайте здесь для примера еще и вам

play03:41

обозначу как используется eld Вот

play03:44

например

play03:46

получение сессии происходит

play03:49

потом происходит обработка запроса

play03:51

нашего и уничтожение сессии допустим

play03:54

назовем это

play03:55

и Давайте еще раз я обращусь и посмотрим

play03:58

влоги смотрите у нас сначала происходит

play04:01

получение нашей сессии

play04:03

Yell Session отдается вот в этот Point

play04:05

мы с ней как-то работаем отдаем ответ

play04:08

пользователю и только потом возвращается

play04:10

контроль в эту функцию Изначально и

play04:13

уничтожается сессия Это был пример с

play04:16

гилт если мы передали параметры например

play04:19

там ABC

play04:22

то у нас бы здесь также требовался бы

play04:25

этот параметр его нужно было бы вводить

play04:27

Окей обычно Так не делается съел дом

play04:30

закончили далее Давайте посмотрим на вот

play04:33

еще на то Как передаются какие-то

play04:36

параметры Давайте обозначим Point

play04:39

пускай будет subjects И у нас есть

play04:42

большая система куча сотни там десятки

play04:46

поинтов и часто пользователи хотят часто

play04:50

табличные данные какие-то условно

play04:51

пользователи хотят получить Там первые

play04:53

50 потом перелистнуть на вторые 50

play04:56

условно пагинацию Мы хотим сделать

play04:59

получить какие-то объекты и как нам

play05:04

добавить пагинацию Как нам добавить вот

play05:07

эти параметры которые называются обычно

play05:09

лимит и скип

play05:13

вдали во все пойнты нация вообще везде и

play05:19

мы не хотим прописывать везде руками

play05:21

лимит

play05:22

равно 10 и везде вот такое дело

play05:25

прописывать Да и здесь и вот здесь и во

play05:28

всех остальных пойнтах это во-первых

play05:30

повторение кода что Влечет за собой

play05:35

проблемы что потом изменить нужно будет

play05:37

во всех местах а не в одном только

play05:39

Ну и ошибки Поэтому лучше все это дело

play05:43

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

play05:45

параметр который мы хотим использовать

play05:47

во всех абсолютно поинтах через

play05:50

зависимость очень просто нам достаточно

play05:53

сделать какую-нибудь функцию например

play06:03

и вот здесь лимит будут

play06:08

мы их передадим просто как словарик

play06:10

допустим лимит это будет лимит скип

play06:14

будет скип

play06:17

и мы будем принимать вот эти параметры

play06:20

пагинации

play06:23

поджиннейшим парамс это будет словарик

play06:27

поэтому пишем что это словарик и он

play06:29

зависит от чего от этой функции fastapi

play06:32

когда я забыл сказать На первом этапе

play06:36

что происходит поставьте

play06:39

перед тем как обрабатывать запрос

play06:41

пользователя Да вот здесь какой-то код

play06:43

выполнять что-то выполнять он все

play06:48

зависимости прогоняет на самом деле что

play06:50

он делает он просто берет эту функцию

play06:51

или класс или просто Колобок вызываем

play06:55

объект берет его и вот название

play06:59

аргумента говорит вот такое переменная

play07:02

будет равна вот такому делу

play07:06

нужно Передать все

play07:10

будет примерно так-то работать Давайте

play07:13

посмотрим

play07:14

Давайте вернёмся

play07:17

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

play07:20

subjects и смотрите у нас появился лимит

play07:23

и скип Давайте заключим Вот они

play07:26

возвращаются И хотя мы не прописывали

play07:29

эти параметры вручную в этот antpoint

play07:33

Они здесь все равно появляются потому

play07:35

что у нас используется зависимость

play07:38

и это немножко нам упрощает жизнь дальше

play07:43

Давайте посмотрим на реализацию с

play07:45

классом на самом деле можно использовать

play07:47

как функцию так как класс смотря что вам

play07:50

удобнее давайте сделаем

play07:53

парамс

play07:55

Да кстати должен быть классными функция

play07:58

класс поджинейший

play08:03

у него будет

play08:09

и он будет принимать допустим лимит тот

play08:12

же самый просто отсюда можно забрать это

play08:13

дело

play08:15

лимит и сгиб и здесь будет встретить

play08:20

просто лимит лимит

play08:23

и то же самое для скипа ничего сложного

play08:26

и мы можем точно также давайте сделаем

play08:29

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

play08:32

это дело различать Здесь тоже

play08:35

изменим и мы будем уже получать

play08:38

естественно не Директ мы будем получать

play08:40

экземпляр класса

play08:43

Вот и сюда прокидываем мы тоже

play08:45

поджинатор сохраняем Давайте посмотрим

play08:47

что изменится изменится ли все что-то у

play08:51

нас появился subject Class у нас также

play08:53

здесь есть эти параметры которые класс в

play08:56

дандер методе init принимает

play09:00

и также все будет работать Абсолютно

play09:02

никакой разницы да Если вам нужна

play09:05

какая-то

play09:06

участок кода объединить под один класс

play09:09

Вы можете это запросто делать с помощью

play09:11

класса если вам нужно какая-то еще

play09:14

логика Да еще какие-то там методы для

play09:16

этого класса пожалуйста Никто не

play09:18

запрещает также когда мы имеем дело с

play09:20

классом Вот видите два раза прописаны

play09:23

Давайте один раз берем вот здесь из dpc

play09:25

посмотрим изменится ли что-либо

play09:28

сохраняем обновляем ничего не меняется

play09:30

также есть параметр лимит скип также мы

play09:32

получим эти параметры и также можем

play09:35

отсюда убрать делать эпизацию оставить в

play09:38

dps

play09:39

и также все будет Аналогично ничего не

play09:42

меняется ответ и параметры одинаковые но

play09:46

рекомендуется конечно чтобы если он

play09:48

стоит какой-нибудь проверять

play09:50

типов

play09:52

то будет лучше если у вас есть

play09:56

Окей так можно работать с классом

play09:59

Представьте давайте что у нас есть класс

play10:02

который отвечает за аутентификацию

play10:05

пользователя

play10:07

проверяет или авторизацию Может ли

play10:10

пользователей смотреть данные and Point

play10:13

может ли он к нему обращаться Давайте

play10:15

здесь напишем вот что

play10:17

У нас есть какой-то защитник Guard

play10:21

охранник нашей наших нашего API и он там

play10:26

не знаю допустим принимает какой-то App

play10:29

Le

play10:30

Не суть важно что это И также у нас при

play10:35

вызове этого

play10:37

экземпляр класса должно что-то произойти

play10:41

Да тут немножко и объединению прямо

play10:43

сразу три темы

play10:45

скол и Квест

play10:47

смотрите

play10:49

Сейчас посмотрим как будет работать и мы

play10:52

здесь применим немножко

play10:54

магии и напишем вот такое дело

play10:59

Давайте сначала напишем и потом

play11:00

посмотрим импортируем из старлетов в

play11:02

целом можно и с поста импортировать но

play11:04

не почем не подсказывает почему-то

play11:06

импортировать и мы проверим Например

play11:09

если

play11:11

есть у нас что-нибудь какой-нибудь

play11:15

супер токен суперкуки

play11:19

in request cookies тогда

play11:23

условно Return True то есть ну неважно

play11:26

просто не вызывая ошибку иначе Вызови Ну

play11:30

да конечно обычно так пишется над ин вот

play11:33

здесь заразим ошибку какой-нибудь http

play11:35

Exception обычно импортируем из-за

play11:39

fastape это дело со статус кодом 403

play11:42

например да то есть запрещен вам доступ

play11:43

Давайте напишем детей

play11:46

запрещено

play11:48

иначе вернем трубу или просто

play11:52

не будем вызывать ошибку Давайте

play11:55

создадим экземпляр класса

play11:59

Допустим

play12:00

payments Допустим у нас есть какое-то

play12:02

приложение которое называется часть

play12:04

приложения сервиса или сервис который

play12:14

и у нас есть какой-то защищенный супер

play12:17

прям защищенный мы не хотим чтобы никто

play12:19

к нему получал доступ например

play12:22

получить все платежи Пускай только

play12:25

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

play12:27

здесь допустим

play12:30

и какая-то идет валидация что вот мы

play12:33

допустим получили этот куки он есть и мы

play12:36

вот здесь проверяем проверяем что в

play12:39

куках есть инфа

play12:43

о наличии прав пользователя

play12:49

будет функция Get payments

play12:53

Мы хотим ее защитить чтобы к ней не мог

play12:56

обращаться пользователь если у него

play12:59

недостаточно прав

play13:01

и здесь мы будем работать с экземпляром

play13:04

класса до этого Как вы помните Мы

play13:06

работали с классом самим и использовали

play13:08

его метод init потому что и нет у нас

play13:11

вызывается когда мы вот так ставим

play13:13

скобочки и вызываем создаем экземпляр

play13:16

класса

play13:17

а если мы хотим работать с экземпляром

play13:19

класса Как вы знаете не знаете мы

play13:22

используем

play13:23

чтобы вызвать экземпляр класса как

play13:26

функцию нужен метод Cold который

play13:28

отвечает именно за вызов экземпляра

play13:30

класса

play13:33

и вот здесь мы будем использовать

play13:39

который является экземпляром

play13:44

и он зависит от вот этого экземпляра

play13:48

класса который будет вызван по стапе

play13:50

перед прогоном этой функции Сейчас

play13:52

посмотрим как это работает и здесь если

play13:55

все окей пройдет то Return там допустим

play13:57

My paymance он вернет

play14:00

Ну неважно что нам важно посмотреть как

play14:03

это работает

play14:05

Давайте сохраним во-первых посмотрим

play14:07

какие куки У нас есть

play14:09

суперкубки если он или нет

play14:12

у меня вообще никаких кук нету поэтому

play14:15

должна выпасть ошибка Давайте посмотрим

play14:17

когда им страничку

play14:21

посмотрим на paymance здесь нет никаких

play14:24

параметров собственно OK мы делаем

play14:28

execute и получаем ошибку запрещено

play14:31

Вуаля все сработало Давайте еще раз

play14:35

пробежимся Почему все как что вообще

play14:38

работает у нас есть да вот начнем отсюда

play14:42

and Point который имеет какую-то

play14:45

зависимость это значит что поставьте

play14:48

перед вызова вот этой функции перед

play14:51

прогоном всей функции сначала прогонит

play14:55

все зависимости и убедиться что они

play14:57

вернулись в целости и сохранности не

play14:59

вызвали Никакой ошибки А если они

play15:01

вызовут ошибку то запрос не будет

play15:03

обработан пользовательский так вот он

play15:06

видит есть какой-то ауф gard payments он

play15:10

не знает понять что это такое но

play15:12

обязательно этот объект должен быть

play15:13

вызываемый То есть ему можно взять

play15:16

скобки написать скобки чтобы он вызвался

play15:19

Окей когда мы вызываем экземпляр класса

play15:22

а Ужгород у нас активируется метод Call

play15:27

в котором есть request request на самом

play15:29

деле фастафе используется много где его

play15:32

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

play15:34

использовать как и в самом поинте чтобы

play15:36

смотреть например

play15:37

данные там IP пользователя User edgend

play15:40

пользователя там что он из Google Chrome

play15:41

зашел к нам или там Сафари зашел и какие

play15:44

у него куки какие у него хедеры и часто

play15:47

это естественно нужно для авторизации

play15:49

аутентификации

play15:51

так вот мы смотрим на его куки здесь и

play15:54

если что-то идет не так если у него нет

play15:55

супер кубка суперкубки то мы рейзим

play15:58

ошибку и поставьте вот этот Point не

play16:00

прогоняет пользователя возвращается

play16:02

ошибка Вот как нам собственно сейчас

play16:04

вернулась запрещено

play16:06

иначе возвращается неважно что нужно

play16:10

просто проверить что пользователь может

play16:12

смотреть и здесь важно заметить что нам

play16:17

это переменная по сути здесь не нужна мы

play16:19

никак не используем Мы просто хотим

play16:20

проверить что нет ошибки и поэтому вот

play16:22

эту зависимость отсюда правильно будет

play16:25

вынести

play16:26

вот сюда сам and Point здесь Аргументы

play16:31

и список из зависимости только одна

play16:33

зависимость будет Мы сюда помещаем и в

play16:37

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

play16:39

нету мы можем Ну понятно что какие-то

play16:41

будут мы не захламляем нашу функцию не

play16:44

нужны аргументами

play16:46

то есть кто-то написал бы вот так

play16:48

например Нижняя подчеркиваю вот так вот

play16:51

нижнее подчеркивание типа мы эту функцию

play16:52

не используем Но это все равно мешает

play16:55

пониманию как это все дело работает ой

play16:58

так я не могу вернуть Окей давайте еще

play16:59

раз напишем

play17:01

dependences это список и здесь он не

play17:04

будет Давайте сохраним это дело и

play17:06

проверим что если он зависимость здесь у

play17:08

нас все равно она отработает на всякий

play17:10

случай обновим не знаю зачем жмем

play17:12

execuit и у нас по-прежнему запрещено

play17:13

потому что у нас нету куки как она

play17:16

называется суперки

play17:18

Давайте добавим во-первых посмотрим что

play17:20

я правильно все проверяю суперкуки это у

play17:23

нас дикт до fastape очень классно

play17:25

показывает даже могу посмотреть

play17:27

провалиться вот библиотеку через Контру

play17:29

и щелчок мыши посмотреть что

play17:32

возвращается дикт кстати вот для этого

play17:33

очень полезно использовать

play17:35

подсказки типов Чтобы другие

play17:38

пользователи понимали Как ваш библиотека

play17:40

работает ну и в целом ваш код работает

play17:42

Если это не библиотека О'кей то есть мы

play17:45

проверяем если ключ суперкубки Давайте

play17:47

его создадим здесь и на самом деле не

play17:49

важно что в нем будет там ABCD это уже

play17:52

валидация происходит вот здесь

play17:54

декодирование этого токена смотрим Что

play17:57

внутри него нам не так важно Мы просто

play17:59

хотим показать что у нас есть

play18:01

этот суперкуки что у нас работает и он

play18:05

будет отправляться теперь вместе с

play18:06

запросом Давайте посмотрим

play18:08

что сейчас будет нажимаю execute и Вуаля

play18:12

у нас прошла

play18:14

что аутентификация авторизации тоже

play18:17

иногда путают В общем нас запустила

play18:19

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

play18:22

какой-то куки Вот здесь мы отсеиваем

play18:26

вообще всех там мошенников которые

play18:27

просто хотят обратиться к нашему сервису

play18:30

сразу типа вон А тут мы должны проверить

play18:32

как-то там декодировать этот токи Ну я

play18:35

думаю понимаете о чем я потому что он

play18:37

обычно защищен это может быть животы

play18:39

токены Мы хотим как-то распознать и

play18:41

данные туда забрать

play18:43

Воля смотрите что мы объединили здесь Мы

play18:47

научились деппендис вызывать не прямо в

play18:50

внутри функции а внутри могут быть

play18:53

другие зависимости и также как вы

play18:55

понимаете сейчас немножко отступление

play18:57

Если у вас есть какой-то роутер

play19:02

в котором объединяем там набор

play19:07

по транзакциям допустим по платежам мы

play19:11

можем здесь также сделать

play19:15

ой ой Вот так вот который будет

play19:18

распространяться на все and Point этого

play19:20

роутера и вам не нужно будет прописывать

play19:22

вот здесь это нигде Да вот у вас

play19:24

множество inpoint получить поймать и

play19:26

добавить payment и отправить payment

play19:28

сделать payment все такое удалить вам не

play19:30

нужно прописывать каждый раз Вы просто

play19:32

распространяйте сразу на все поинты это

play19:34

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

play19:36

что например вот здесь

play19:38

у вас может быть зависимость которая

play19:40

называется в виде функции например

play19:43

получить администратора получить там

play19:45

директора получить модератора тогда Вам

play19:48

нужно будет уже точечно вот здесь

play19:50

указывать

play19:50

например получить какого-то функция

play19:54

будет

play19:56

его есть ко всем

play20:00

Вот Мы научились работать с

play20:03

зависимостями Но что более важное вам

play20:05

хотел показать как это request и про

play20:08

вишенку который говорил самом начале Как

play20:10

работает аутентификация здесь мы

play20:12

посмотрели какую-то базовый пример

play20:13

Давайте посмотрим реальный пример зайдем

play20:16

в остапе здесь есть статья под названием

play20:20

символ А у вас паролем вот она и здесь

play20:25

котик Давайте его скопируем

play20:27

нам важно даже сам код как он работает

play20:37

здесь что есть интересное здесь есть

play20:40

зависимость Вот такая А если вы смотрели

play20:43

доки анализировали пытались понять что

play20:45

это Как это работает там немножко у

play20:49

тайны не сказано про это Но я вам по

play20:51

секрету сейчас поведаю как это работает

play20:53

у нас есть зависимость getcorent User

play20:55

которую с которой вы наверное знакомы

play20:57

смотрели предыдущие видео которые

play20:59

получает текущего пользователя перед тем

play21:01

как

play21:02

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

play21:05

каком-то поинтов ее используют

play21:09

Давайте посмотрим по все глубже и глубже

play21:11

углубляясь погружаясь как она работает

play21:14

сначала нажмем на неё видим что она

play21:17

зависит от другой зависимости Ну это

play21:18

вполне нормальная ситуация Окей

play21:21

деткам фьюзер зависит токена который

play21:24

использует токены который зависит

play21:26

какой-то схемы эта схема это экземпляр

play21:29

класса вот такого и вот здесь уже

play21:32

непонятно что это за класс потому что он

play21:34

находится внутри библиотеки Давайте в

play21:36

него провалимся если у вас настроена

play21:37

окружение настроен библиотека фасадка

play21:40

загружена можно нажать и посмотреть как

play21:43

устроена

play21:45

Исходный код просто и не очень интересен

play21:49

здесь

play21:54

нам интересен Call да то есть когда

play21:57

вызывается спросить что прыгаю когда вот

play22:00

это вызывается дело где вот здесь

play22:03

напоминаю поставьте

play22:05

вызывает это этот экземпляр перед тем

play22:09

как запустить эту функцию что он делает

play22:11

он также принимает request как я вам

play22:14

показал смотрит на хедеры если там есть

play22:17

авторизарейшен то он как-то это дело

play22:19

распакует проверяет что там схема брр

play22:23

если не берёшь то вызывает ошибку Типа

play22:25

вы не аутентифицированы

play22:27

иначе если все нормально возвращает вот

play22:30

какой-то параметр и дальше он спускается

play22:33

параметр есть токен он как-то здесь

play22:35

декодируется и дальше дальше более более

play22:39

высокий уровень мы выходим и

play22:41

возвращаемся к этому принимаем уже

play22:43

текущего юзера там как-то из базы данных

play22:45

забираем и можем с ним работать если на

play22:47

каждом из этапов не произошло ошибки

play22:50

and Point выполняется пользователь

play22:52

возвращается ответ

play22:54

Вот так это работает кастомная

play22:56

идентификации в этом курсе Не будет она

play22:58

будет в моем платном курсе который я

play23:00

готовлю который более структурированный

play23:02

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

play23:06

общения

play23:08

там это все дело будет там будут и

play23:10

другие темы там и мониторинг мы

play23:12

подключим графа Ну и будем наблюдать как

play23:14

у нас работает Какая нагрузка

play23:18

а в этом курсе уже Останется только

play23:20

докер докер compose и немножко мы

play23:22

наверное за диплом куда-то это дело

play23:24

чтобы проверить как оно работает на этом

play23:26

все друзья Спасибо вам огромное за

play23:28

поддержку тем кто поддерживает меня на

play23:30

бусте это действительно мотивирует меня

play23:33

снимать новые видео потому что много

play23:35

учебы много работы много дел и до видео

play23:38

иногда не доходят руки Спасибо вам

play23:40

огромное за просмотр подписывайтесь на

play23:42

канал пишите комментарии мне также это

play23:44

поддерживает и продвигает спасибо еще

play23:47

раз Всем пока

Rate This

5.0 / 5 (0 votes)

Related Tags
FastAPIИнъекцииЗависимостиАутентификацияПользователиРазработкаAPIPythonТестированиеКодирование
Do you need a summary in English?