Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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
- Host: GitHub
- URL: https://github.com/andmerk93/yacut
- Owner: andmerk93
- Created: 2023-07-18T15:12:09.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2023-09-07T14:12:12.000Z (over 1 year ago)
- Last Synced: 2024-11-24T01:09:49.463Z (2 months ago)
- Topics: flask, jinja2, python, sqlalchemy
- Language: Python
- Homepage:
- Size: 206 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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
- Расположить форму ввода в шаблоне посередине
---