Проект представляет собой мини диспетчер задач и заметок, разработанный на основе FastAPI, с реализацией системы регистрации, аутентификации и авторизации пользователей.Проект включает модульную архитектуру, гибкое логирование через logging, и взаимодействие с базой данных с использованием SQLAlchemy. Для управления миграциями используется Alembic.
- ⚡ FastAPI это фреймворк для создания лаконичных и довольно быстрых HTTP API-серверов со встроенными валидацией, сериализацией и асинхронностью,
что называется, из коробки.
- SQLAlchemy программная библиотека на языке Python для работы с реляционными СУБД с применением технологии ORM.
- Pydantic библиотека для Python, предназначенная для валидации и трансформации данных.
- PostgreSQL свободная объектно-реляционная система управления базами данных (СУБД).
- Docker Compose система сборки, запуска и управления множеством контейнеров.
- FastAPI Users Безопасное хеширование паролей по умолчанию, аутентификация и авторизация.
- Восстановление пароля по электронной почте.
- Тестирование с Pytest.
- Celery асинхронная распределенная очередь задач, написанная на Python, она предназначена для обработки сообщений в реальном времени при помощи многозадачности.
- Redis система управления базами данных, которая хранит информацию в виде пар ключ-значение.
- Poetry инструмент для управления зависимостями в Python проектах (аналог встроенного pip).
- Развертывание с помощью Docker Compose.
-
Управление пользователями:
- Управление пользователями с помощью библиотеки FastAPI Users
- Регистрация и вход пользователей.
- Безопасное хеширование паролей с использованием Argon2 algorithm и bcrypt.
- Реализацию обеспечивает pwdlib — современная оболочка хеширования паролей.
- Авторизация с использованием JWT токенов через библиотеку python-jose.
- Защита эндпоинтов с помощью ролей и зависимостей.
- У каждого пользователя свой профиль.
- Отдельно можно создать суперпользователя, например для администрирования приложения.
-
Функционал:
- Задачи и заметки:
- Создание новой задачи.
- Обновление задач и заметок:
- Автор может обновлять по одному пункту или сразу всю информацию.
- Удаление:
- Автор может удалить свои заметки и задачи.
- Просмотр задач и заметок:
- Получение списка всех опубликованных задач и заметок.
- Просмотр конкретной записи.
- Фильтрация задач и заметок по тегам.
- Сортировка задач и заметок.
- Категории:
- Автор может добавлять категории к задачам и заметкам
- Задачи и заметки:
-
Логирование:
- Использование logging для удобного управления логами.
-
Модульная архитектура:
- Проект разделен на модули для упрощения поддержки и масштабирования.
-
Рабата с отложенными сообщениями
- Использование Celery и Redis для отложенных сообщений:
- Реализована функция отправки на email-почту приветственного сообщения о регистрации нового пользователя.
- Использование Jinja2 для оформления текста отправки сообщения.
- Использование Celery и Redis для отложенных сообщений:
-
Тестирование
- Тестирование работы базы данных с помощью Pytest.
- Тестирование API с помощью Pytest.
- Ручное тестирование документации.
├── app
│ ├── .env # Конфигурация окружения
│ ├── .env_template # Пример конфигурации окружения
│ ├── actions/ # Создание суперпульзователя
│ ├── alembic/ # Миграции базы данных
│ ├── alembic.ini # Конфигурация Alembic
│ ├── api/ # Модуль API
│ ├── celery_app/ # Модуль для отложенных событий
│ ├── core/ # Модуль авторизации и аутентификации, работы с БД, конфиг файл
│ ├── crud/ # Работа с базой данных
│ ├── main.py # Основной файл для запуска приложения
│ ├── models/ # Создание таблиц в базе данных
│ ├── schemas/ # Схемы модулей
│ ├── templates/ # Работа c Jinja2
│ └── utils/ # Утилиты
└── tests
├── api/ # Тестирование API
├── modules/ # Тестирование БД
├── test_config.py # Конфиг файл
├── test_main.py # ТЗапуск тестов
└── utils/ # Утилиты
├── docker-compose.yml # Инструкции, необходимые для запуска и настройки сервисов
├── Dockerfile # Конфигурационный файл
├── init-db.sh # Файл для создания тестовой БД
├── poetry.lock # Зависимости проекта
├── pyproject.toml # Зависимости проекта
├── pytest.ini # Конфигурация Pytest
├── README.md # Документация проекта
- Основные:
fastapi
,pydantic
,uvicorn
- Для работы с базой данных:
SQLAlchemy
,asyncpg
,alembic
- Для аутентификации:
FastAPI Users
,bcrypt
,passlib[bcrypt]
,python-jose
- Шаблонизатор:
jinja2
- Прочее:
markdown2
,logging
,aiosmtplib
,celery
,redis
- Тестирование:
pytest
,pytest-asyncio
-
Склонируйте репозиторий:
git clone https://github.com/AndreyMelman/TaskManager.git
-
Настройте файл
.env
:APP_CONFIG__DB__URL="postgresql+asyncpg://name:password@localhost:port/database" APP_CONFIG__ACCESS_TOKEN__RESET_PASSWORD_TOKEN_SECRET="SECRET" APP_CONFIG__ACCESS_TOKEN__VERIFICATION_TOKEN_SECRET="SECRET" APP_CONFIG__EMAIL_A__SMTP_USER="" APP_CONFIG__EMAIL_A__SMTP_PASSWORD="" APP_CONFIG__EMAIL_A__SMTP_SERVER="" APP_CONFIG__EMAIL_A__SMTP_PORT="" APP_CONFIG__CELERY__CELERY_BROKER_URL="redis://redis:6379/0" APP_CONFIG__CELERY__CELERY_RESULT_BACKEND="redis://redis:6379/0"
-
Для быстрого запуска приложения потребуется докер, запустите:
docker compose up --build
Создается база данных PostgreSQL, сервер Redis, запускается Celery и приложение, а также выполняются миграции базы данных.
Приложение будет доступно по адресу http://0.0.0.0:8000.
Этот шаблон предоставляет прочную основу для разработки масштабируемых веб-приложений с аутентификацией, авторизацией и управлением контентом. Возможности легко расширяются за счет модульной архитектуры.
Возможные направления для развития:
- Реализация системы комментариев.
- Добавление ролей пользователей (например, администратор, редактор).
- Расширение интерфейса с использованием современных фронтенд-фреймворков (например, Vue.js или React).