Skip to content

Datanar - сервис по сокращению ссылок на базе Django и Bootstrap

License

Notifications You must be signed in to change notification settings

Gray-Advantage/Datanar-Django

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 - для помощи в генерации сокращённых ссылок

Структура проекта

База данных

Функциональная структура базы данных следующая: scheme

Основных моделей две - Redirect и Click

  • Redirect - хранит в себе связь между длинной и короткой ссылкой
  • Click - хранит информацию о переходе по redirect (Для статистики и для ограничения по переходам)

Локальное развёртывание

Установка Python

Для запуска этого проекта вам потребуется Python.

Если у вас его еще нет, вы можете скачать его с официального сайта, рекомендуется установить версию в диапазоне 3.9 - 3.12

Установка Git

Windows

  1. Скачайте установщик Git с официального сайта
  2. Запустите установщик и следуйте инструкциям на экране.

MacOS

  1. Откройте терминал.
  2. Установите Homebrew, если у вас его еще нет, с помощью следующей команды:
    /bin/bash -c"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  3. Установите Git с помощью команды:
    brew install git

Linux (Debian / Ubuntu)

  1. Откройте терминал.
  2. Обновите список пакетов:
    sudo apt update
  3. Установите Git с помощью следующих команд:
    sudo apt install git

После установки Git вы можете проверить его версию и убедиться, что он установлен правильно, с помощью команды git --version. Эта команда должна вывести версию Git на экран.

Установка Redis

Для celery (очередь задач, для обработки файлов со ссылками) требуется установить redis

Windows

Redis официально не поддерживает Windows, поэтому ниже описанный способ может не сработать (лично у нас получилось запустить, но без виртуального окружения)

  1. Скачать неофициальный порт и запустить установщик msi (от имени администратора)
  2. В диспетчере задач в службах должна появится служба Redis

MacOS

  1. Откройте терминал.
  2. Установите Homebrew, если у вас его еще нет, с помощью следующей команды:
    /bin/bash -c"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  3. Установите Redis с помощью команды:
    brew install redis
  4. Запустите Redis:
    brew services start redis

Linux (Debian / Ubuntu)

  1. Откройте терминал.
  2. Обновите список пакетов:
    sudo apt update
  3. Установите Redis с помощью следующих команд:
    sudo apt install redis

Установка gettext

Windows

Скачать и запустить установщик gettext для windows

MacOS

  1. Откройте терминал.
  2. Установите Homebrew, если у вас его еще нет, с помощью следующей команды:
    /bin/bash -c"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  3. Установите gettext с помощью команды:
    brew install gettext

Linux (Debian / Ubuntu)

  1. Откройте терминал.
  2. Обновите список пакетов:
    sudo apt update
  3. Установите gettext с помощью следующих команд:
    sudo apt install gettext

Клонирование репозитория

  1. Откройте терминал (cmd для Windows, Terminal для Mac).
  2. Перейдите в директорию, где вы хотите сохранить проект, используя команду cd. Например: cd C:\Users\YourUsername\Documents\myProjects\sites или cd ~/myProject/sites
  3. Клонируйте репозиторий, используя следующую команду:
    git clone https://github.com/Gray-Advantage/Datanar-Django.git

Установка виртуального окружения

Напомним, что лично у нас на windows не получилось запустить redis в виртуальном окружении, поэтому попробуйте пропустить шаг 2 и 3

  1. В терминале перейдите в директорию проекта:

    cd datanar
  2. Создайте виртуальное окружение:

    • На Windows:
      python -m venv venv
    • На Mac или Linux:
      python3 -m venv venv

    Стоит отметить, что не всегда на linux будет работать python3, а на windows python, попробуйте оба варианта.

  3. Активируйте виртуальное окружение:

    • На 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

Введите логин, почту и пароль суперпользователя.

В зависимости от настроек, перед попаданием в админ панель вам может потребоваться подтвердить свою почту.

Теперь можете зарегистрироваться с этими данными на сайте и в правом верхнем углу, нажав на свою аватарку, в списке вы увидите пункт "Админка", которая и приведёт вас в админ панель.

Запуск сервера Django

Запустите рабочий процесс 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/.

Вы потрясающие! ©

Авторы

sergey Андреев Сергей @Gray_Advantage

vladimir Клименко Владимир @brandonzorn

artem Третьяков Артем @piper273