Этот проект представляет собой готовый шаблон для разработки масштабируемых веб-приложений на основе FastAPI с полноценной системой аутентификации и авторизации. Проект включает модульную архитектуру, поддерживает гибкое логирование с loguru, и взаимодействие с базой данных через SQLAlchemy с асинхронной поддержкой. Система миграций Alembic упрощает работу со схемой базы данных.
- Веб-фреймворк: FastAPI
- ORM: SQLAlchemy с асинхронной поддержкой через aiosqlite
- База данных: SQLite (легко заменяемая на другую SQL-СУБД)
- Система миграций: Alembic
- Авторизация/Аутентификация: bcrypt для хеширования паролей, python-jose для защиты данных с использованием JWT
fastapi[all]==0.115.0
- высокопроизводительный веб-фреймворкpydantic==2.9.2
- валидация данныхuvicorn==0.31.0
- ASGI-серверjinja2==3.1.4
- шаблонизаторSQLAlchemy==2.0.35
- ORM для работы с базами данныхaiosqlite==0.20.0
- асинхронная поддержка SQLitealembic==1.13.3
- управление миграциями базы данныхbcrypt==4.0.1
иpasslib[bcrypt]==1.7.4
- хеширование паролейpython-jose==3.3.0
- работа с JWT токенамиloguru==0.7.2
- красивое и удобное логирование
Проект построен с учётом модульной архитектуры, что позволяет легко расширять приложение и упрощает его поддержку. Каждый модуль отвечает за отдельные задачи, такие как авторизация или управление данными.
├── app/
│ ├── auth/ # Модуль авторизации и аутентификации
│ │ ├── dao.py # Data Access Object для работы с БД
│ │ ├── models.py # Модели данных для авторизации
│ │ ├── router.py # Роутеры FastAPI для маршрутизации
│ │ ├── schemas.py # Схемы для валидации данных
│ │ └── utils.py # Вспомогательные функции для авторизации
│ ├── dao/ # Общие DAO для приложения
│ │ ├── database.py # Подключение к базе данных и управление сессиями
│ │ └── base.py # Базовый класс DAO для работы с БД
│ ├── dependencies # Зависимости в проекте
│ │ ├── auth_dep.py # Зависимости для авторизации
│ │ └── dao_dep.py # Зависимости для сессий SQLAlchemy
│ ├── migration/ # Миграции базы данных
│ │ ├── versions/ # Файлы миграций
│ │ ├── env.py # Настройки среды для Alembic
│ │ ├── README # Документация по миграциям
│ │ └── script.py.mako # Шаблон для генерации миграций
│ ├── static/ # Статические файлы приложения
│ │ └── .gitkeep # Пустой файл для сохранения папки в Git
│ ├── config.py # Конфигурация приложения
│ ├── exceptions.py # Исключения для обработки ошибок
│ ├── main.py # Основной файл для запуска приложения
├── data/ # Папка для хранения файла БД
│ └── db.sqlite3 # Файл базы данных SQLite
├── .env # Конфигурация окружения
├── alembic.ini # Конфигурация Alembic
├── README.md # Документация проекта
└── requirements.txt # Зависимости проекта
Обновленный раздел с подробным описанием основных модулей:
Модуль отвечает за управление процессами аутентификации (входа пользователей) и авторизации (проверки доступа).
Основные файлы:
dao.py
: Объект доступа к данным пользователей. Содержит методы для работы с базой данных (создание, обновление, поиск пользователей и т. д.).dependencies.py
: Внедрение зависимостей, таких как проверка токенов и авторизация для защищённых маршрутов.models.py
: Определяет ORM-модели данных для пользователей (например, таблица Users в базе данных).router.py
: Роутер для маршрутизации запросов, связанных с аутентификацией. Определяет эндпоинты для входа, регистрации и проверки доступа.schemas.py
: Определяет Pydantic-схемы для валидации входных данных и структуры ответов (например, формат данных для регистрации пользователей).utils.py
: Вспомогательные функции для работы с токенами (создание, проверка JWT) и шифрование паролей.
Модуль содержит абстракции для работы с базой данных. Используется для управления подключениями и реализации CRUD-операций.
base.py
: Базовый класс DAO, предоставляющий общие методы для работы с базой данных, такие как добавление, обновление, удаление и поиск записей.database.py
: Отвечает за подключение к базе данных, управление сессиями SQLAlchemy, а также создание асинхронного подключения (например, черезaiosqlite
).
Модуль упрощает управление схемой базы данных и позволяет безопасно вносить изменения.
versions/
: Хранятся файлы миграций, автоматически создаваемые Alembic.env.py
: Основной файл конфигурации для Alembic. Определяет подключение к базе данных и взаимодействие с ORM.script.py.mako
: Шаблон для генерации новых файлов миграций.
Модуль содержит зависимости, которые используются в проекте.
auth_dep.py
: Зависимости, связанные с авторизацией пользователя в системеdao_dep.py
: Зависимости, связанные с управллением сессией SQLAlchemy и с работой с дочерними классами BaseDao
- Определяет параметры приложения, загружаемые из файла
.env
. Например:SECRET_KEY
: Секретный ключ для подписания JWT.ALGORITHM
: Алгоритм хеширования токенов.DATABASE_URL
: URL для подключения к базе данных.
- Обеспечивает удобное управление конфигурацией для разных окружений (локальное, тестовое, продакшн).
- Инициализация приложения: Настраивает FastAPI-приложение, включая параметры, такие как название, версия, и описание.
- Подключение роутеров: Регистрирует маршруты, определённые в модулях приложения, например:
app.auth.router
для маршрутов авторизации.- Любые дополнительные модули (например,
app.users.router
).
- Настройка зависимостей: Внедряет глобальные зависимости, такие как подключение к базе данных или параметры конфигурации.
- Настройка middleware: Добавляет промежуточные слои для обработки запросов (например, CORS, сжатие, обработка ошибок).
- Обработка ошибок: Определяет глобальные обработчики исключений, чтобы возвращать понятные ответы при возникновении ошибок (например, 401 Unauthorized или 500 Internal Server Error).
- Запуск сервера: Используется для старта приложения с помощью ASGI-сервера (Uvicorn).
Для аутентификации используется JSON Web Token (JWT) с bcrypt для хеширования паролей и python-jose для генерации и проверки токенов. Это обеспечивает безопасное хранение данных и защищает API-эндпоинты.
-
Клонируйте репозиторий:
git clone https://github.com/Yakvenalex/FastApiWithAuthSample.git .
-
Установите зависимости:
pip install -r requirements.txt
-
Создайте и настройте
.env
файл:SECRET_KEY=supersecretkey ALGORITHM=HS256
-
Запустите приложение с Uvicorn:
uvicorn app.main:app --reload --port 8005
При необходимости замените port на нужный.
-
Инициализируйте Alembic:
cd app alembic init -t async migration
Затем переместите
alembic.ini
в корень проекта. -
В
alembic.ini
установитеscript_location
какapp/migration
. -
Создайте миграцию:
alembic revision --autogenerate -m "Initial migration"
-
Примените миграции:
alembic upgrade head
- Разделяйте функциональность приложения на модули для удобства тестирования и поддержки.
- Обрабатывайте ошибки с четкими ответами и HTTP-кодами.
- Проводите миграции с Alembic для управления схемой базы данных.
- Используйте переменные окружения для безопасного хранения конфиденциальных данных.
Этот шаблон является мощной и удобной основой для разработки приложений на FastAPI с поддержкой аутентификации, авторизации и структурированной архитектуры, готовой к масштабированию.