/fotogram

Primary LanguagePython

📸

Fotogram — Платформа для создания и обмена постами с изображениями

Fotogram — это современная и мощная платформа для обмена изображениями, общения и взаимодействия. Создайте свой пост с текстом и фото, поделитесь им с друзьями и общайтесь в режиме реального времени! В основе системы лежат FastAPI для разработки бэкенда и JavaScript для управления интерактивным фронтендом.

🌟 Основные возможности:

🔐 Аутентификация пользователей: Полная поддержка системы регистрации и входа с безопасным управлением токенами.

🖼️ Создание и публикация постов: Публикуйте посты с заголовками, текстом и загружайте изображения.

🖼️ Управление медиафайлами: Поддержка загрузки и хранения нескольких изображений для каждого поста.

💬 Чат в реальном времени: Общайтесь с друзьями и другими пользователями через встроенный чат, сохраняя всю историю сообщений.

🌐 RESTful API: Интуитивно понятный и легко расширяемый API для интеграции и взаимодействия с другими сервисами.

⚡ Документация API: Встроенная документация на базе Swagger, доступная по адресу /docs.

Почему FastAPI:

  • Валидация данных: FastAPI использует Pydantic для валидации данных. Когда пользователь отправляет данные, фреймворк автоматически проверяет, все ли в порядке. Если что-то не так, пользователь сразу получает сообщение об ошибке. Это помогает избежать проблем и делает приложение более надежным.
  • Быстрота и эффективность: FastAPI очень быстрый! Он помогает обрабатывать запросы быстрее, чем многие другие фреймворки, что отлично подходит для сайтов с большим количеством пользователей.
  • Асинхронность: Когда приложение ждет, например, ответ от базы данных или другого сервиса, оно не замирает. Вместо этого оно может обрабатывать другие запросы. Это делает приложение более отзывчивым и эффективным.
  • Документация API: FastAPI автоматически генерирует документацию для API с помощью Swagger. Можно легко понять, как использовать приложение и какие данные ему нужно отправлять. Документация обновляется в реальном времени по мере изменения кода.

Так же использовались:

  • Pydantic: Для валидации и сериализации данных.
  • Alembic: Для управления миграциями базы данных.
  • Docker: Для создания изолированной среды для работы приложения.
  • SQLAlchemy: Для работы с базой данных с использованием ORM.

🛠️ Установка и настройка:

1. Начните с клонирования проекта из GitHub:

git clone https://github.com/stegruslan/fotogram.git

2. Настройка виртуального окружения:

Чтобы установить зависимости проекта и активировать окружение достаточно выполнить команды:

poetry install
poetry shell

3. Создайте файл .env в корне проекта и добавьте туда следующие параметры:

SECRET_KEY=ваш_секретный_ключ
DATABASE_URL=ваша_база_данных
DB_USER=ваше_имя_пользователя
DB_PASSWORD=ваш_пароль
DB_NAME=ваше_имя_базы

4. Применение миграций:

Чтобы база данных соответствовала моделям приложения, примените миграции Alembic:

alembic upgrade head

5. Запуск приложения:

Запустите сервер FastAPI с автоперезагрузкой для разработки:

uvicorn main:app --reload

Настройка фронтенда

Для отображения статических файлов и HTML страниц перейдите в директорию front:

cd front

Вы можете использовать Nginx сервер.

Откройте браузер и перейдите по адресу: http://localhost:8000, чтобы увидеть фронтенд в действии.

🐳 Запуск с использованием Docker и Docker Compose

Проект можно запустить в контейнерах с помощью Docker и Docker Compose.

1. Настройка Docker:

Убедитесь, что Docker и Docker Compose установлены на вашей системе.

2. Создайте файл .env:

Создайте файл .env в корне проекта и добавьте следующие параметры:

SECRET_KEY=ваш_секретный_ключ
DATABASE_URL=ваша_база_данных
DB_USER=ваше_имя_пользователя
DB_PASSWORD=ваш_пароль
DB_NAME=ваше_имя_базы

3. Запуск контейнеров:

Используйте следующую команду для запуска всех сервисов с помощью Docker Compose:

bash

docker-compose up --build

Docker Compose запустит следующие сервисы:

  • Postgres: база данных.
  • Frontend: статический сервер для фронтенда.
  • Backend: FastAPI приложение для обработки запросов.

4. Доступ к приложению:

  • Фронтенд: будет доступен по адресу: http://localhost
  • Бэкенд: API: по адресу http://localhost:8000

🔑 Аутентификация

Чтобы использовать все функции платформы, пользователь должен зарегистрироваться или войти в систему. Это можно сделать через API или через интерфейс на сайте.

📋 API Эндпоинты

  • Регистрация пользователя: POST /api/v1/users/signup/
  • Вход в систему: POST /api/v1/users/login/
  • Создание поста: POST /api/v1/posts/create/
  • Просмотр всех постов: GET /api/v1/posts/
  • Чат с пользователями: GET /api/v1/users/chats/