Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/andmerk93/yacut

Flask + Jinja2 + SQLAlchemy
https://github.com/andmerk93/yacut

flask jinja2 python sqlalchemy

Last synced: 13 days ago
JSON representation

Flask + Jinja2 + SQLAlchemy

Awesome Lists containing this project

README

        

# Сервис YaCut

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

Сервис YaCut - это сервис укорачивания ссылок и API к нему

Ключевые возможности сервиса:
* генерация коротких ссылок и связь их с исходными длинными ссылками
* переадресация на исходный адрес при обращении к коротким ссылкам

Пользовательский интерфейс сервиса — одна страница с формой. Эта форма состоит из двух полей:
* обязательного для длинной исходной ссылки
* необязательного для пользовательского варианта короткой ссылки (не должен превышать 16 символов)

Если пользователь предложит вариант короткой ссылки, который уже занят, то появляется соответствующее уведомление. Существующая в базе данных ссылка должна остаться неизменной.

Если пользователь не заполнит поле со своим вариантом короткой ссылки, то сервис должен сгенерировать её автоматически. Формат для ссылки по умолчанию — шесть случайных символов, в качестве которых можно использовать:
* большие латинские буквы,
* маленькие латинские буквы,
* цифры в диапазоне от 0 до 9.

Автоматически сгенерированная короткая ссылка добавляется в базу данных, но только если в ней уже нет такого же идентификатора. В противном случае идентификатор генерируется заново.

## API для проекта

API проекта доступен всем желающим. Сервис обслуживает только два эндпоинта:
* /api/id/ — POST-запрос на создание новой короткой ссылки;
* /api/id// — GET-запрос на получение оригинальной ссылки по указанному короткому идентификатору.

Примеры запросов к API, варианты ответов и ошибок приведены в спецификации `openapi.yml`

## Примеры запросов

**GET** `.../api/id/{short_id}/`

*200*
```
{
"url": "string"
}
```
*404*
```
{
"message": "Указанный id не найден"
}
```

**POST** `.../api/id/`
```
{
"url": "string",
"custom_id": "string"
}
```
*201*
```
{
"url": "string",
"short_link": "string"
}
```
*400*
```
{
"message": "Отсутствует тело запроса"
}
```

## Шаблон наполнения .env файла
```
FLASK_APP=yacut
FLASK_ENV=development
DATABASE_URI=sqlite:///db.sqlite3
SECRET_KEY=SECRET
```

## Требования:
- Python 3
- Flask 2
- SQLAlchemy 1.4
- Jinja2
- WTForms
- и их зависимости (описано в requirements.txt)

## Установка и запуск:
- клонировать репозиторий на машину, с которой будет будет запускаться сервис

```
git clone https://github.com/andmerk93/yacut.git
```

- На машине должен быть установлен Python актуальной версии (тестировалось на 3.8)
- развернуть виртуальное окружение python в папке с проектом (yacut)
```
python3 -m venv venv
```
- активировать виртуальное окружение для linux/unix
```
source ./venv/bin/activate
```
- для Windows, должно быть разрешено выполнение скриптов Powershell
```
venv\Scripts\activate
```

- с запущенным виртуальным окружением нужно выполнить установку требуемых компонентов
```
pip install -r requirements.txt
```

- затем, выполнить миграции
```
flask db upgrade
```

- запустить проект
```
flask run --port=80
```

Проект будет доступен по https://localhost/

## TODO

- Расположить форму ввода в шаблоне посередине

---