YaCut — это сервис укорачивания ссылок, который позволяет преобразовывать длинные URL в короткие и удобные для использования. Проект также включает дополнительную функцию — асинхронную загрузку файлов на Яндекс Диск с автоматической генерацией коротких ссылок для скачивания.
- Генерация коротких ссылок и связь их с исходными длинными URL
- Поддержка пользовательских вариантов коротких ссылок (до 16 символов)
- Автоматическая генерация уникальных коротких идентификаторов (6 символов: буквы и цифры)
- Асинхронная загрузка нескольких файлов на Яндекс Диск
- Предоставление коротких ссылок для скачивания загруженных файлов
- REST API для создания и получения ссылок
- Защита зарезервированных маршрутов (
files,api)
- Python 3.12
- Flask 3.0
- Flask-SQLAlchemy
- Flask-WTF
- aiohttp (для асинхронных запросов к Яндекс Диску)
- SQLite / PostgreSQL
- 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- Клонируйте репозиторий:
git clone https://github.com/Ofmeret/async-yacut.git
cd async-yacut- Создайте и активируйте виртуальное окружение:
python3 -m venv venv # На Windows: python -m venv venv
source venv/bin/activate # На Windows: venv\Scripts\activate- Установите зависимости:
pip install -r requirements.txt- Инициализируйте базу данных:
flask db init
flask db migrate -m "Initial migration"
flask db upgrade- Запустите приложение:
flask runПриложение будет доступно по адресу: http://localhost:5000
pytest tests/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>/- Главная страница (
/) — создание коротких ссылок - Страница загрузки файлов (
/files) — асинхронная загрузка файлов на Яндекс Диск
- Введите длинный URL в поле "Длинная ссылка"
- Укажите свой вариант короткой ссылки или она автоматически создастся
- Нажмите "Создать"
- Перейдите на страницу
/files - Выберите один или несколько файлов
- Нажмите "Загрузить"
- После загрузки появятся короткие ссылки для скачивания файлов
- Асинхронная загрузка файлов с использованием aiohttp
- Валидация пользовательских коротких ссылок (только латинские буквы, цифры и символ подчёркивания)
- Защита от повторных маршрутов
- Генерация уникальных идентификаторов с проверкой коллизий
- Обработка ошибок с разными ответами для API и веб-интерфейса
Александр Макаров Python-разработчик GitHub
Проект создан в учебных целях в рамках курса Яндекс Практикум. Свободное использование и модификация разрешены.