Проект реализован как REST API на Django + DRF с отдельным Telegram-ботом, взаимодействующим с backend по HTTP
Quote Book - сервис для хранения пользовательских цитат используя REST API с доступом через Telegram-бота
- REST API для CRUD-операций с пользовательскими данными
- Изоляция данных между пользователями (доступ только к своим записям)
- Поиск по автору без учёта регистра и по части имени, поиск по дате
- Сортировка цитат от новых к старым
- Получение случайной записи
- Валидация входных данных и обработка ошибок
- Unit-тесты для моделей, сериализаторов и эндпоинтов
- Отдельный frontend-клиент, взаимодействующий с backend через HTTP (можно подключить прокси SOCKS5)
- Добавление, редактирование, удаление, поиск и получение данных через API
- Inline-кнопки: пагинация и удаление/редактирование прямо в сообщении (✏️/🗑 у каждой цитаты)
- Случайная цитата с кнопкой «🎲 Ещё одну» для повторного броска
- Удобный ввод даты («📅 Сегодня» / «Оставить как есть») и понятные сообщения об ошибках
- Отсутствие прямого доступа к базе данных (строгое отделение от API)
Backend:
- Python 3.12
- Django + Django REST Framework
- SQLite (с возможностью замены на PostgreSQL)
Frontend:
- Telegram Bot (python-telegram-bot)
- Proxy (SOCKS5)
Инфраструктура и инструменты:
- Docker, docker-compose
- Github Actions (CI)
- flake8
Настройте собственный файл .env в соответствии с примером .env.example
Клонируем проект
git clone https://github.com/Aleksander1Byte/quote-book.git
cd quote_bookНастраиваем виртуальное окружение
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # WindowsУстанавливаем зависимости
pip install -r requirements.txtПроводим миграции и проверяем тесты
python manage.py migrate
python manage.py testЗапуск
python manage.py runservercd telegram_botУстанавливаем зависимости
pip install -r requirements-tg.txtЗапуск бота
python bot.pyНайдите бота в Telegram: @thequotebook_bot
| Команда | Описание |
|---|---|
| /start | Начать работу |
| /quotes | Показать все ваши цитаты |
| /add | Добавить новую цитату |
| /random | Случайная цитата |
| /search | Поиск по автору |
| /search_date | Поиск по дате |
| /delete | Удалить цитату |
| /help | Помощь |
Редактирование и удаление выполняются inline-кнопками ✏️/🗑 прямо в списке цитат, а навигация по страницам — кнопками
◀️ /▶️ в том же сообщении.
Пример использования:
Вы: /add
Бот: ✍️ Напишите текст цитаты:
Вы: Я - часть той силы, что вечно хочет зла и вечно совершает благо
Бот: 👤 Теперь укажите автора:
Вы: Мефистофель
Бот: 📅 Укажите дату ГГГГ-ММ-ДД или нажмите «📅 Сегодня»:
Вы: [📅 Сегодня]
Бот: ✅ Цитата сохранена!
Вы: /random
Бот: 🎲 Случайная цитата
"Я - часть той силы, что вечно хочет зла и вечно совершает благо"
— Мефистофель
[🎲 Ещё одну]
┌─────────────────┐ REST API ┌──────────────────┐ ┌──────────────┐
│ Telegram Bot │ ◄────────────► │ Django + DRF │ ◄─► │ Database │
│ (Frontend) │ │ (Backend) │ │ │
└─────────────────┘ └──────────────────┘ └──────────────┘
Aleksander1Byte