Datanar - сайт по сокращению ссылок
Datanar представляет собой сервис для сокращения ссылок, который позволяет пользователям преобразовывать длинные URL-адреса в короткие и удобные для использования ссылки.
- Для визуальной привлекательности
- Для удобства передачи не по сети
- Для отслеживания статистики переходов
- Для защиты конечного ресурса с помощью пароля
Это не новая идея и уже существуют множество сервисов с похожим функционалом, вот их небольшой срез:
Сервис | Регистрация | Кастомизация ссылки | QR-code | Статистика | Русский язык | Пароль | API |
---|---|---|---|---|---|---|---|
clck.ru | Нет (+) | Нет (-) | Да (+) | Нет (-) | Да (+) | Нет (-) | Да (+) |
goo.su | Нет (+) | Нет (-) | Да (+) | Да (+) | Да (+) | Нет (-) | Да (+) |
bitly.com | Да (-) | Да (+) | Да (+) | Да ($) | Нет (-) | Нет (-) | Да ($) |
Innkin.com | Да (-) | Да ($) | Нет (-) | Да ($) | Нет (-) | Да ($) | Да ($) |
rebrandly.com | Нет (+) | Да (+) | Да (+) | Да (+) | Нет (-) | Нет (-) | Да (+) |
tinyurl.com | Нет (+) | Да (+) | Да (+) | Да ($) | Нет (-) | Нет (-) | Да ($) |
urlog.ru | Нет (+) | Нет (-) | Нет (-) | Да (+) | Да (+) | Да (+) | Нет (-) |
(+) - функция есть; (-) - функции нет; ($) - функция платна
Но все они реализуют только часть функционала, цель же Datanar предоставить пользователю его весь и сразу!
С Datanar вы можете:
- Сократить ссылку
- Получить сразу сгенерированный QR-code
- Указать свой собственный короткий url-адрес
- Отслеживать статистику переходов по ссылке
- Выгружать статистику в удобном формате
- Установить пароль для сокращённой ссылки
- Указывать до какой даты будет работать ссылка
- Указывать сколько переходов можно совершить по ссылке
- Связать свой сервис с нашим по API
- Bootstrap - популярная (html / css / js) библиотека для фронтенда
- Celery - очередь задач (в качестве брокера выступает Redis)
- Chart.js - отрисовка диаграмм в статистике
- DB-IP - определение страны и города переходящего по IP
- Django - основной фреймворк web сервиса
- Segno - генерация QR-кодов
- Sqids - для помощи в генерации сокращённых ссылок
Функциональная структура базы данных следующая:
Основных моделей две - Redirect и Click
- Redirect - хранит в себе связь между длинной и короткой ссылкой
- Click - хранит информацию о переходе по redirect (Для статистики и для ограничения по переходам)
Для запуска этого проекта вам потребуется Python.
Если у вас его еще нет, вы можете скачать его с официального сайта, рекомендуется установить версию в диапазоне 3.9 - 3.12
- Скачайте установщик Git с официального сайта
- Запустите установщик и следуйте инструкциям на экране.
- Откройте терминал.
- Установите Homebrew, если у вас его еще нет, с помощью
следующей команды:
/bin/bash -c"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Установите Git с помощью команды:
brew install git
- Откройте терминал.
- Обновите список пакетов:
sudo apt update
- Установите Git с помощью следующих команд:
sudo apt install git
После установки Git вы можете проверить его версию и убедиться, что он
установлен правильно, с помощью команды git --version
.
Эта команда должна вывести версию Git на экран.
Для celery (очередь задач, для обработки файлов со ссылками) требуется установить redis
Redis официально не поддерживает Windows, поэтому ниже описанный способ может не сработать (лично у нас получилось запустить, но без виртуального окружения)
- Скачать неофициальный порт и запустить установщик msi (от имени администратора)
- В диспетчере задач в службах должна появится служба Redis
- Откройте терминал.
- Установите Homebrew, если у вас его еще нет, с помощью
следующей команды:
/bin/bash -c"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Установите Redis с помощью команды:
brew install redis
- Запустите Redis:
brew services start redis
- Откройте терминал.
- Обновите список пакетов:
sudo apt update
- Установите Redis с помощью следующих команд:
sudo apt install redis
Скачать и запустить установщик gettext для windows
- Откройте терминал.
- Установите Homebrew, если у вас его еще нет, с помощью
следующей команды:
/bin/bash -c"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- Установите gettext с помощью команды:
brew install gettext
- Откройте терминал.
- Обновите список пакетов:
sudo apt update
- Установите gettext с помощью следующих команд:
sudo apt install gettext
- Откройте терминал (cmd для Windows, Terminal для Mac).
- Перейдите в директорию, где вы хотите сохранить проект, используя команду
cd
. Например:cd C:\Users\YourUsername\Documents\myProjects\sites
илиcd ~/myProject/sites
- Клонируйте репозиторий, используя следующую команду:
git clone https://github.com/Gray-Advantage/Datanar-Django.git
Напомним, что лично у нас на windows не получилось запустить redis в виртуальном окружении, поэтому попробуйте пропустить шаг 2 и 3
-
В терминале перейдите в директорию проекта:
cd datanar
-
Создайте виртуальное окружение:
- На Windows:
python -m venv venv
- На Mac или Linux:
python3 -m venv venv
Стоит отметить, что не всегда на linux будет работать python3, а на windows python, попробуйте оба варианта.
- На Windows:
-
Активируйте виртуальное окружение:
- На Windows:
venv\Scripts\activate
- На Mac или Linux:
source venv/bin/activate
Установите все необходимые пакеты, используя следующую команду:
pip install -r requirements/prod.txt
Опять, стоит отметить, что возможны два варианта - pip
или pip3
, зависит
от вашей ОС.
Также добавьте файл .env
в текущую директорию со следующим содержанием:
DJANGO_DEBUG=False
DJANGO_SECRET_KEY=this_is_test_key_-_some_very_dummy_secret_key
DJANGO_ALLOWED_HOSTS=*
DJANGO_MAIL_HOST=smtp.mail.ru
DJANGO_MAIL_PORT=2525
DJANGO_MAIL_USER=webmaster@localhost
DJANGO_MAIL_PASSWORD=this_very_secret_password_for_smtp_mail
DEFAULT_USER_IS_ACTIVE=False
DJANGO_USE_SIMPLE_DATABASE=True
DJANGO_LOG_FILE_PATH=/path/to/log/file
DJANGO_SECRET_KEY
, DJANGO_ALLOWED_HOSTS
замените на свои значения.
DJANGO_MAIL_HOST
, DJANGO_MAIL_PORT
, DJANGO_MAIL_USER
,
DJANGO_MAIL_PASSWORD
- настройки почтового сервиса, используйте свои.
DJANGO_LOG_FILE_PATH
- путь, по которому приложение будет записывать все логи
(уровень логирования WARNING и выше)
DJANGO_USE_SIMPLE_DATABASE
- Если True
, то приложение будет использовать в
качестве базы данных простой файл.
Если установлено значение False
, то необходимо указать настройки для сложной
СУБД (postgresql):
DJANGO_DATABASE_NAME
- название вашей БД, DJANGO_DATABASE_USER
- имя
пользователя БД, DJANGO_DATABASE_PASSWORD
- пароль пользователя БД.
Предполагается, что БД находиться там же, где и приложения и работает на порту
5432
Настройка DEFAULT_USER_IS_ACTIVE=False
- означает, что перед использованием
сервиса обязательно требуется подтверждённая почта, установите True
, если
этого не нужно
Также структура .env
продублирована .env.example
для удобства.
С помощью следующей команды, вы можете, сразу создать и скопировать данные из
.env.example
в .env
- На Windows:
copy .env.example .env
- На Mac или Linux:
cp .env.example .env
Если не добавить .env
или просто продублировать информацию из .env.example
в .env
, приложение будет запущено с дефолтными настройками, что
не рекомендуется по соображениям безопасности.
Скомпилируйте файлы локализации данного проекта:
django-admin compilemessages
Если возникает ошибка, по перейдите в директорию datanar
:
cd datanar
И повторите немного изменённую команду:
python3 manage.py compilemessages
Перейдите в директорию datanar
, если вы этого ещё не сделали:
cd datanar
Создайте базу данных:
python3 manage.py migrate
Также сделайте сбор статики, если будет предупреждение про перезапись файлов введите "yes":
python3 manage.py collectstatic
Ещё нужно будет создать суперпользователя (админа) сайта:
python3 manage.py createsuperuser
Введите логин, почту и пароль суперпользователя.
В зависимости от настроек, перед попаданием в админ панель вам может потребоваться подтвердить свою почту.
Теперь можете зарегистрироваться с этими данными на сайте и в правом верхнем углу, нажав на свою аватарку, в списке вы увидите пункт "Админка", которая и приведёт вас в админ панель.
Запустите рабочий процесс celery в новой консоле:
celery -A datanar worker -l INFO
Запустите сервер Django с помощью следующей команды:
python3 manage.py runserver
Помните, что Django в прод режиме (т.е. сейчас) не отдаёт статику (например картинки) по соображениям оптимизации, для этого нужно настроить отдельный web-сервер. Или же запустить Django в режиме разработки.
Если вы хотите запустить Django в режиме разработки, то не забудьте установить дополнительные зависимости:
cd ..
pip install -r requirements/test.txt
cd datanar
А в файле .env
перевести переменную DJANGO_DEBUG
в True
:
DJANGO_DEBUG=True
...
Установив зависимости test.txt
, вы также получите возможность запустить тесты
для локальной проверки целостности проекта:
python3 manage.py test
Ожидаемый результат после выполнения команды: OK
После запуска вы должны иметь возможность открыть проект в браузере по адресу http://127.0.0.1:8000/.
Вы потрясающие! ©
Андреев Сергей @Gray_Advantage
Клименко Владимир @brandonzorn
Третьяков Артем @piper273