Навигация по курсу:
Пришло время для нашего первого реального маршрута 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
Теперь нам нужно включить router в файле Route_user.py в наше приложение в файле main.py. Но минуточку, если у нас 100 роутов, должны ли мы импортировать и включать все 100 в файл main.py? Нет, он будет загроможден, поэтому я собираюсь создать новый router в файле apis > base.py , который будет содержать информацию о других роутах. Поместите следующий код в apis > base.py.
Еще один шаг: убедитесь, что мы импортировали этот «api_router» в файл 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.
и нам нужно указать эту схему ShowUser в качестве модели ответа нашего post роута. Я считаю, что было бы лучше назвать это request_schema!! Хорошо, теперь мы модифицируем наш apis > version1 > route_users.py следующим образом:
Все готово, теперь мы не передаем в ответ хешированный пароль и флаг is_superuser.
✅ Читайте также: Часть 10 (Пилим роуты для блога)
.
❤️ Если вам понравилась статья, ставьте лайк и подписывайтесь на мой канал (Заходи в Ай-Ти).
👍 Если у вас остались вопросы или есть интересные темы, которые вы хотите, чтобы я разобрал, то пишите в комментариях. Ваше мнение очень важно для меня!
#fastapi #fastapi python #fastapi sqlalchemy #fastapi pydantic