Найти в Дзене
Computer Pro

Twitter-clone на FastAPI. Операции с пользователями и БД. Часть 3

Оглавление
Фоточка для карточки. Фото автора. Северодвинск апрель 2024
Фоточка для карточки. Фото автора. Северодвинск апрель 2024

Минимально работающее нечто создано. Теперь задача превратить это нечто в что-то. Чтобы тут были пользователи. У пользователя должен быть api_key, благодаря которому он может заходить в наш аналог твиттера. Разработчиками фронтенда предусмотрена форма для отправки этого api_key чтобы сменить пользователя:

-2

Надеюсь я правильно понял эту тему. Что ж приступим к реализации, а там посмотрим что и как.

Как выяснилось - сменить пользователя нельзя, тут может быть только один пользователь с api_key = test, потому что роут /login выключен из фронтэнда:

-3

Поэтому я создам пользователя, у которого в базе данных будет запись с api_key == test

Код post-эндпойнта, по созданию нового пользователя:

-4

Который отправляет нас к операции с базой данных:

-5

Хотя, нет, авторизация оказывается, работает

Я создал несколько пользователей через:

-6

Вот как происходит переключение между пользователями, в зависимости от введенного api_key:

-7
-8
-9

Так что это работает, осталось разобраться с "моими фолловерами" и "у кого я фолловер", потому как у меня тут [ ] (заглушка)

Подписчики и я подписчик у кого(followers и following)

Итак, методом проб и ошибок у меня "нарисовался" код для получения подписчиков, и узнать на кого я подписан. Для начала, пришлось переделать "схему" UsersMe, здесь же схема для создания нового пользователя:

-10

После чего снова стало красиво в документации Swagger:

-11

Если ввести api_key "lenin" в поле ввода то можно увидеть результат:

-12

А теперь посмотрим как это работает, в коде:

Слегка изменил модель юзера, добавив туда __repr__

-13

Это не обязательное действие, но иногда в терминале хочется видеть что в класс входит, а не безымянный объект класса такого то...

Как получить все данные, как на пользователя с api_key, так и на его подписчиков, так же на кого этот пользователь подписан:

-14

Остается только эти данные "расшифровать" в эндпойнте /api/users/me:

-15

Ну вот, считаю что операция по работе с пользователями закончена. Данный код, пожалуй можно слить в мастер (в моём случае, на гитхабе, это main).

Ну а на сегодня - всё!

UPD. С пользователем еще не закончено, потому как выяснилось, что у пользователя есть еще один эндпойнт "/api/users/<user_id>" и только там можно посмотреть читателей и читаемых. Значит, пока не в мастер!

-16

UPD_2. Хотел этот эндпойнт дома доделать, но чот психанул, побыстрому слепил (crud и роут):

-17
-18

Вот теперь точно всё!