Skip to content

Ofmeret/async-yacut

Repository files navigation

YaCut

Описание проекта

YaCut — это сервис укорачивания ссылок, который позволяет преобразовывать длинные URL в короткие и удобные для использования. Проект также включает дополнительную функцию — асинхронную загрузку файлов на Яндекс Диск с автоматической генерацией коротких ссылок для скачивания.

Основные функции

  • Генерация коротких ссылок и связь их с исходными длинными URL
  • Поддержка пользовательских вариантов коротких ссылок (до 16 символов)
  • Автоматическая генерация уникальных коротких идентификаторов (6 символов: буквы и цифры)
  • Асинхронная загрузка нескольких файлов на Яндекс Диск
  • Предоставление коротких ссылок для скачивания загруженных файлов
  • REST API для создания и получения ссылок
  • Защита зарезервированных маршрутов (files, api)

Технологический стек

Backend

  • Python 3.12
  • Flask 3.0
  • Flask-SQLAlchemy
  • Flask-WTF
  • aiohttp (для асинхронных запросов к Яндекс Диску)
  • SQLite / PostgreSQL

Frontend

  • HTML5/CSS3
  • Bootstrap 4
  • Jinja2

Инфраструктура

  • SQLAlchemy ORM
  • Flask-Migrate (Alembic)
  • Pytest для тестирования
  • Yandex Cloud Disk API

Установка и запуск

Настройка переменных окружения

Создайте файл .env в корне проекта и добавьте в него параметры из .env.example переменные:

FLASK_APP=yacut
FLASK_DEBUG=1
DATABASE_URI=sqlite:///./instance/yacut.db
SECRET_KEY=YOUR_SECRET_KEY
DISK_TOKEN=you-token-in-y_disk

Установка и запуск

  1. Клонируйте репозиторий:
git clone https://github.com/Ofmeret/async-yacut.git
cd async-yacut
  1. Создайте и активируйте виртуальное окружение:
python3 -m venv venv # На Windows: python -m venv venv
source venv/bin/activate  # На Windows: venv\Scripts\activate
  1. Установите зависимости:
pip install -r requirements.txt
  1. Инициализируйте базу данных:
flask db init
flask db migrate -m "Initial migration"
flask db upgrade
  1. Запустите приложение:
flask run

Приложение будет доступно по адресу: http://localhost:5000

Запуск тестов

pytest tests/

API документация

YaCut предоставляет REST API для работы с короткими ссылками:

Создание короткой ссылки

POST /api/id/

{
  "url": "https://example.com/very/long/url",
  "custom_id": "you_name_max_16_symbol"
}

Получение оригинальной ссылки

GET /api/id/<short_id>/

Использование

Веб-интерфейс

  1. Главная страница (/) — создание коротких ссылок
  2. Страница загрузки файлов (/files) — асинхронная загрузка файлов на Яндекс Диск

Примеры

Создание короткой ссылки через форму:

  1. Введите длинный URL в поле "Длинная ссылка"
  2. Укажите свой вариант короткой ссылки или она автоматически создастся
  3. Нажмите "Создать"

Загрузка файлов:

  1. Перейдите на страницу /files
  2. Выберите один или несколько файлов
  3. Нажмите "Загрузить"
  4. После загрузки появятся короткие ссылки для скачивания файлов

Особенности реализации

  • Асинхронная загрузка файлов с использованием aiohttp
  • Валидация пользовательских коротких ссылок (только латинские буквы, цифры и символ подчёркивания)
  • Защита от повторных маршрутов
  • Генерация уникальных идентификаторов с проверкой коллизий
  • Обработка ошибок с разными ответами для API и веб-интерфейса

Автор

Александр Макаров Python-разработчик GitHub

Ссылка на проект

Репозиторий на GitHub

Лицензия

Проект создан в учебных целях в рамках курса Яндекс Практикум. Свободное использование и модификация разрешены.

About

async-yacut project

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors