Найти тему
Заходи в Ай-Ти

FastAPI - создание web-приложения. Часть 9 (Создание роута)

Пришло время для нашего первого реального маршрута API 😎. До сих пор мы создавали очень простые маршруты. На этот раз мы будем использовать pydantic схемы, подключения к базе данных и зависимости — все в одной конечной точке. Мы собираемся создать маршрут, который позволит создавать пользователей. Почему мы делаем это в первую очередь? Это потому, что в нашей модели «Блог» у нас есть внешний ключ к таблице пользователя.

Итак, нам нужен Owner_id, который по сути является идентификатором модели пользователя. Давайте перейдем к коду, но перед этим создадим новую структуру папок:

Новая труктура проекта
Новая труктура проекта

Теперь нам нужно ввести следующие строки в apis > v1 > Route_user.py.

Вау! Наш первый роут)
Вау! Наш первый роут)
  • Мы получим запрос на публикацию в этом роуте.
  • Функция create_user получит пользователя по запросу, а схема UserCreate проверит, что у него есть адрес электронной почты в правильном формате и пароль.
  • Мы получим сеанс базы данных, используя зависимость get_db, которую мы создали в файле session.py.
  • Мы снова вызываем совершенно новую функцию с именем create_new_user и передаем пользовательские данные из запроса и сеанса базы данных.
  • Здесь мы пытаемся следовать шаблону проектирования, называемому шаблоном репозитория. Таким образом, наш код, взаимодействующий с базой данных, полностью отделен от этого маршрута. В будущем, если мы захотим использовать какой-либо другой ORM, например Tortoise или Pweee, это станет проще, поскольку код ORM полностью отделен от маршрута. Ответственность за создание пользователя передается функции create_new_user, поэтому давайте ее реализуем.

Введите следующее в db > repository > user.py

user.py
user.py

Теперь нам нужно включить router в файле Route_user.py в наше приложение в файле main.py. Но минуточку, если у нас 100 роутов, должны ли мы импортировать и включать все 100 в файл main.py? Нет, он будет загроможден, поэтому я собираюсь создать новый router в файле apis > base.py , который будет содержать информацию о других роутах. Поместите следующий код в apis >  base.py.

base.py
base.py

Еще один шаг: убедитесь, что мы импортировали этот «api_router» в файл main.py и включили его в наше приложение: main.py

main.py
main.py

Все сделано. Давайте проверим его работу:

{
"password": "$2b$12$qsPsF3.JVAwWYqsioLvuJOOSiJCZuWRv5yCBCuFdumoA1bYRlXhCO",
"email": "some2@example.com",
"is_superuser": false,
"id": 3,
"is_active": true
}

Мы передаем hashed_password, id и статус is_superuser. Это детали реализации, и с точки зрения безопасности мы не должны передавать эти данные. Давайте ограничим наш ответ только именем пользователя, адресом электронной почты и статусом is_active. Помните pydantic схемы? Они используются для проверки данных запроса. Аналогичным образом их можно использовать для ограничения отдаваемых клиенту данных.
Давайте добавим новую схему в
schemas > user.py.

users.py
users.py

и нам нужно указать эту схему ShowUser в качестве модели ответа нашего post роута. Я считаю, что было бы лучше назвать это request_schema!! Хорошо, теперь мы модифицируем наш apis > version1 > route_users.py следующим образом:

Route_users.py
Route_users.py

Все готово, теперь мы не передаем в ответ хешированный пароль и флаг is_superuser.

Читайте также: Часть 10 (Пилим роуты для блога)

.

❤️ Если вам понравилась статья, ставьте лайк и подписывайтесь на мой канал (Заходи в Ай-Ти).

👍 Если у вас остались вопросы или есть интересные темы, которые вы хотите, чтобы я разобрал, то пишите в комментариях. Ваше мнение очень важно для меня!

#fastapi #fastapi python #fastapi sqlalchemy #fastapi pydantic