Рубрики
Без рубрики

Создание простого сокращения ссылок для вашего приложения Django

В рамках моей работы по скольжению я хотел включить простой сокращение ссылок, чтобы его было легче … пометить Python.

Как часть моей работы над Слайдезирование Я хотел включить простой сокращение ссылок, чтобы было легче поделиться действительно длинными URL -адресами. Эта статья пройдет через то, почему вы, возможно, захотите сделать это и как внедрить относительно простой в вашем существующем приложении Django.

Для этой статьи я предполагаю, что вы знаете основы того, как создать приложение Django и что вы хотели бы включить этот сокращенник в существующее приложение.

Зачем сокращать ссылку?

Приложения Django часто используют поле Slug в определениях модели. Слизняк – это просто короткое имя, которое используется в URL, чтобы дать ему человеческое имя. Обратитесь к официальной документации для получения дополнительной информации о том, как использовать Слизневое поле Анкет

Например, если вы создаете блог, у вас может быть поле заголовка для блога, но вы также хотите, чтобы описание в URL уникально идентифицировало сообщение в блоге.

Для поста, мой слизняк может быть «на основе вступления в класс-класс», которые приведет к полному URL, который выглядит примерно так: http://acoolblog.com/blog/intro-to-django-class-views

Этот подход хорош, потому что URL -адрес является описательным и немного рассказывает нам о сообщении в блоге, даже не читая его. Недостатком этого подхода является то, что это действительно длинный URL. При совместном обмене через Twitter или другие каналы могут быть лучше.

Одним из распространенных подходов является использование стороннего услуги, такого как бить или Tinyurl, чтобы перевести эту длинную ссылку на что -то более компактное. В этом подходе нет ничего плохого. Тем не менее, я хочу повысить узнаваемость бренда Так что я держу все URL -адреса проходить через одно и то же приложение. Поскольку это относительно легко сделать, почему бы не дать ему шанс?

Я также дам несколько дополнительных предостережений. Этот подход по сокращению ссылок не принимает ни одного произвольного URL и сокращает его. Он основан на уникальном идентификаторе, связанном с каждым объектом Django. Это означает, что если вам просто нужны короткие ссылки для сообщений в блоге, это будет работать отлично. Если вам нужны короткие ссылки для изображений, комментариев и других страниц, вам нужно будет изменить этот подход.

Другое предостережение, которое я хочу сделать, заключается в том, что это не подходит для использования для любого типа безопасности. Очень легко запустить этот алгоритм и попытаться «угадать» URL -адреса. Я предполагаю, что все эти ссылки являются общедоступными и что любые попытки угадать короткие URL -адреса не вредны для вашего сайта.

Запустить код

Этот код в значительной степени основан на Django Short-Urls но обрезается довольно немного для легкой интеграции в ваше приложение.

Для фактического алгоритма укорочения мы будем использовать модуль Python под названием short_url Анкет

Пожалуйста, не забудьте установить его с помощью PIP:

pip install short_url

Стоит попробовать, чтобы вы могли увидеть, что он делает:

import short_url
print(short_url.encode_url(2))

25t25

print(short_url.encode_url(3))

ghpzy

На простейшем уровне Short_URL использует алгоритм для преобразования любого числа в последовательность букв. Алгоритм детерминирован, что означает, что каждый раз, когда вы кодируете значение 2, вы получаете один и тот же результат обратно.

Поскольку алгоритм всегда вычисляет тот же результат, мы также можем расшифровать текстовую строку и получить номер:

print(short_url.decode_url('25t52'))

2

print(short_url.decode_url('ghpzy'))

3

Еще один приятный аспект этого алгоритма заключается в том, что определенные буквы и цифры исключены, поэтому люди не будут путать, например, является ли это 0 или a O.

Теперь, когда мы знаем основы для создания уникального идентификатора, мы можем включить это в наше существующее приложение Django с небольшой дополнительной работой.

Интеграция с Джанго

Я собираюсь создать ShortUrl Приложение, которое включает в себя urls.py, views.py файлы.

Вот пример файла urls.py в моем приложении Shorturl:

from django.urls import path

from .views import redirect_view

urlpatterns = [path('/', view=redirect_view, name='short_url_view')]

Этот файл в основном говорит Django, что, когда появляется URL -адрес, выглядит следующим образом:/25T52/для вызова redirect_view и передать значение 25T52 к функции просмотра.

Я также включаю эту строку в свой мастер -urls.py file:

path('short/', include('shorturl.urls'))

Это гарантирует, что URL будет выглядеть примерно так: http://acoolblog.com/short/25t52/

Теперь, когда у нас установлена структура URL, давайте посмотрим на фактическую функцию Views.py:

from django.apps import apps
from django.http import Http404
from django.shortcuts import get_object_or_404, redirect
import short_url


def redirect_view(request, tiny):
    """
    Redirect to a given object from a short URL.
    """

    model = apps.get_model('MYAPP', 'MYBLOG')
    try:
        id = short_url.decode_url(tiny)
    except ValueError:
        raise Http404('Bad encoded ID.')

    # Try to look up the object. If it's not a valid object, or if it doesn't
    # have an absolute url, bail again.
    obj = get_object_or_404(model, pk=id)
    return redirect(obj)

В этом примере у меня есть приложение под названием MyApp и модель блога под названием MyBlog. Обязательно измените это, чтобы использовать свое собственное приложение и модели.

Код пытается преобразовать крошечную строку в число. Если это преобразование неудачно, оно вернет ошибку HTTP 404.

Последний шаг – выяснить, какой объект соответствует идентификатору, используя get_object_or_404 функция Как только он найдет объект, он будет перенаправить на URL, который показывает этот объект.

Вопрос сейчас, как он знает, какой URL использовать для этого объекта?

С помощью get_absolute_url функция в нашей модели.

В этом случае, если у нас есть модель MyBlog, мы можем включить get_absolute_url функция в определении модели, которая выглядит так в нашем файле моделей.py:

def get_absolute_url(self):
    return reverse_lazy('blog_page', args=[self.slug])

Пожалуйста, обратитесь к документации Django по get_absolute_url Если вам не нравится этот код и где его включить.

Мы почти закончили!

Последняя часть, которую мы должны включить, – это способ генерировать short_url. Для моей реализации я решил добавить его в модели.py Файл прямо ниже моего get_absolute_url Функция:

def get_short_url(self):
    tinyid = short_url.encode_url(self.pk)
    return reverse_lazy('short_url_view', kwargs={'tiny': tinyid})

Эта часть кода примет идентификатор объекта и создаст URL -адрес на основе его и вернет его.

Теперь мы знаем, как генерировать короткий URL и превратить его в более длинную. Последний шаг – включить информацию в шаблон. Если мы хотим построить полный общий URL -адрес, мы можем включить эту информацию в нашем шаблоне:

Эта часть кода вернет полный URL, который будет подходить для Обмен через Twitter: http://acoolblog.com/short/25t52/

Наконец, не забудьте добавить это ShortUrl Приложение к вашему файлу sturts.py в Django_apps список.

Чтобы поделиться примером этого в действии, я использовал слайдез, чтобы поделиться своими слайдами из недавнего разговора. Короткий URL выглядит так https://slidezing.com/short/4xct4/ а затем перенаправляет на https://slidezing.com/landing/chrism/evangelizing-python-for-business/

Я надеюсь, что это полезно для всех. Не стесняйтесь оставлять комментарии, если у вас есть вопросы о подходе.

Оригинал: “https://dev.to/chris1610/building-a-simple-link-shortener-for-your-django-app-3apf”