https://github.com/rxyalxrd/yadro_randomuser
Приложение представляет из себя простую web страницу с полем для ввода количества человек, которых необходимо загрузить с API, а также таблица с информацией обо всех людях.
https://github.com/rxyalxrd/yadro_randomuser
docker docker-compose fastapi python3 redis
Last synced: 3 months ago
JSON representation
Приложение представляет из себя простую web страницу с полем для ввода количества человек, которых необходимо загрузить с API, а также таблица с информацией обо всех людях.
- Host: GitHub
- URL: https://github.com/rxyalxrd/yadro_randomuser
- Owner: Rxyalxrd
- License: bsd-3-clause
- Created: 2025-05-19T19:47:31.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-05-25T13:23:58.000Z (about 1 year ago)
- Last Synced: 2025-07-30T11:05:57.647Z (11 months ago)
- Topics: docker, docker-compose, fastapi, python3, redis
- Language: Python
- Homepage:
- Size: 1.38 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# RandomUser Redis API
## Описание
Веб-приложение для взаимодействия с внешним API [randomuser.me](https://randomuser.me), загрузки случайных пользователей и отображения информации о них через веб-интерфейс. Все данные хранятся временно в Redis, что обеспечивает актуальность данных при каждом запросе и не требует постоянного хранилища.
## Стек технологий
* Python 3.10+
* FastAPI
* Redis (вместо постоянной базы данных)
* Bootstrap 5
* HTML / JS (Vanilla)
## Установка и запуск
1. Клонировать репозиторий:
```bash
git clone git@github.com:Rxyalxrd/YADRO_RandomUser.git
cd src
```
2. Установить зависимости:
```bash
make install
```
3. Убедитесь, что Redis запущен и доступен.
4. Запустить сервер:
```bash
make run
```
5. Перейти в браузере по адресу: [http://127.0.0.1:8000](http://127.0.0.1:8000)
## API эндпоинты
### Загрузить пользователей
**POST** `/users/load`
Загружает указанное количество случайных пользователей (до 1000) из randomuser.me в Redis.
```json
{
"limit": 1000
}
```
### Получение пользователей по страницам
**GET** `/users/{page}`
Возвращает пользователей с пагинацией (по умолчанию по 5 на страницу).
Пример ответа:
```json
{
"page": 1,
"per_page": 5,
"total": 1000,
"users": [ ... ]
}
```
### Получить пользователя по ID
**GET** `/homepage/{user_id}`
Возвращает одного пользователя по его порядковому номеру (от 1 до 1000).
### Получить случайного пользователя
**GET** `/homepage/random`
Возвращает случайного пользователя из Redis.
## Страницы
* `/` — Главная страница. Содержит форму загрузки пользователей и таблицу с пагинацией.
* `/homepage/{user_id}` — Страница пользователя по ID.
* `/homepage/random` — Страница со случайным пользователем.
## Особенности реализации
* Используется Redis как временное хранилище. При каждом вызове `/users/load` данные в Redis обновляются заново.
* Пагинация позволяет работать с большим количеством данных без полной загрузки всего списка.
* Bootstrap используется для стилизации таблицы и формы.
## Требования из задания и соответствие
1. **Таблица с нужными полями:** ✅
2. **Вся информация хранится в Redis:** ✅
3. **Использован Bootstrap:** ✅
4. **Начальная загрузка 1000 пользователей:** ✅
5. **Просмотр пользователя по ID:** ✅
6. **Случайный пользователь:** ✅
7. **Тесты отсутствуют:** ❌ (можно добавить pytest + httpx.asyncclient)
## Возможности для улучшения
* Добавление юнит- и интеграционных тестов.
* Кэширование случайного пользователя на короткое время.
* UI-индикация загрузки/ошибок.
* Фильтрация и поиск пользователей на фронтенде.
* Логирование
* Обработку исключений вынести в декоратор
---