Посібник зі створення програми URL Shortener за допомогою Django

Найкращий спосіб вивчити Django або будь-яку іншу навичку — це застосувати знання, які ви маєте, створюючи функціональні проекти.

Django є найбільш використовуваним фреймворком веб-розробки Python. Його вбудовані функції та велика кількість пакетів сторонніх розробників зробили його одним із найулюбленіших веб-фреймворків у всьому світі.

Він швидкий, надійний і має багато вбудованих функцій. Наприклад, система автентифікації з отворами, яка дозволяє зосередитися на основних функціях вашої програми. Крім того, ви можете встановити зовнішні пакети для виконання ще складніших завдань, як-от Django-allauth, який дозволяє реєструвати користувачів у їхніх соціальних облікових записах.

Але наведемо деякі факти. Джанго це такий величезний фреймворк, що інколи важко почати працювати з ним.

Отже, сьогодні ви збираєтеся створити з нуля повністю функціональну програму Django.

До кінця цього підручника ви:

  • Написав програму для скорочення URL-адрес
  • Зрозумійте шаблон Django MVT
  • Вивчили робочий процес створення проекту

Попередні вимоги

Усі наведені нижче вимоги необов’язкові та допоможуть вам слідувати підручнику. Але якщо у вас немає досвіду роботи з цим, не хвилюйтеся. Найважливіший крок – перший.

  • Базове розуміння команд UNIX (l, cd, rm, touch)
  • Базове розуміння класів і функцій Python
  • Python, встановлений на вашому комп’ютері (Можливо, очевидно, але мені довелося його включити)
  • Було б чудово, якби ви вже створили щось за допомогою Django

Тут буде доступний увесь робочий код Репо Github.

Тепер, коли ви кристально чітко ознайомилися з попередніми концепціями, давайте перейдемо до суті.

Заява про проект

У цьому підручнику ви збираєтеся створити засіб скорочення URL-адрес. По суті, скорочення URL-адрес – це служба, яка приймає довгу URL-адресу та перетворює її на компактну.

Наприклад, якщо ви хочете поділитися твітом і додати посилання на свій веб-сайт, але у вас є обмеження на кількість символів, ви можете використати засіб скорочення URL-адрес.

Давайте подивимося це на графіку.

Як бачите, засіб скорочення URL-адрес отримує довгу URL-адресу та повертає коротку. Це саме те, що ви збираєтеся сьогодні будувати.

У цьому проекті ви попрактикуєтеся у використанні шаблону MVT, вивчите основи проектування бази даних за допомогою моделей Django та навчитеся показувати інформацію користувачеві через представлення, URL-адреси та шаблони.

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

По суті, веб-сайт Django побудований на основі одного проекту та кількох окремих програм. Кожен із цих додатків має певні функції та може працювати самостійно.

Уявімо складну веб-програму на зразок Переповнення стеку. Його функціональність базується на двох основних аспектах.

  • Керування користувачами: вхід, вихід, репутація, дозволи
  • Форум: Питання, відповіді, теги, фільтри

Отже, відповідно до структури веб-сайту Django, проект мав би назву StackOverflow, який має дві основні програми. Програма для користувачів і програма для форуму.

Кожен із цих додатків має самодостатню функціональність. Це означає, що обидва містять увесь код, необхідний для належної роботи.

Сюди входять моделі (структура бази даних), перегляди (запити та відповіді), специфічні шаблони URL-адрес і, звичайно, шаблони та статичні файли (зображення, CSS, JavaScript). Це означає, що будь-яку програму Django можна повторно використовувати, оскільки вона здатна працювати сама по собі.

Скорочено, проект відноситься до набору конфігурацій і програм, які призначені для створення веб-програми. З іншого боку, додаток Django є частиною проекту, який є самостійним (має все необхідне для роботи), і його метою є виконання певної операції.

Налаштуйте проект Django

У цьому розділі ви збираєтеся налаштувати проект Django. Для цього ви збираєтеся використовувати різні інструменти, такі як віртуальне середовище, щоб організувати залежності Python і найважливіші сценарії Django. Django-admin і manage.py

Віртуальне середовище

Я завжди рекомендую працювати з віртуальні середовища під час створення програм за допомогою Django. Це найефективніший спосіб підтримувати певний набір залежностей. Але головне його призначення — ізолювати пакети розробки від глобальних.

Отже, давайте створимо віртуальне середовище за допомогою вбудованої команди форми Python.

Примітка. Для роботи цього методу потрібен Python 3.6 або новіша версія.

python -m venv .venv

Ця команда використовує команду python -m або python –mod. По суті, він запускає модуль або бібліотеку як сценарій. Відповідно до значення цієї команди, venv — це бібліотека, яку ми запускаємо, а .venv — це назва віртуального середовища, яке ми хочемо створити.

Отже, простою мовою ця команда означає.

Привіт, Python, запусти як сценарій вбудовану бібліотеку venv і створи назву virtualenv .venv

Тепер настав час активувати віртуальне середовище, яке ми щойно створили, за допомогою наступної команди.

source .venv/bin/activate

Щоб підтвердити, що у вас нуль пакетів, встановлених у новому venv, ви запускаєте.

pip freeze

Якщо ви правильно активували віртуальне середовище, ви не отримаєте жодних результатів. Це тому, що ми ще нічого не встановили.

Давайте зайдемо в Django

Щоб створити нашу програму скорочення URL-адрес, ми почнемо з встановлення пакета Django. Django є стороннім пакетом, тому нам потрібно встановити його за допомогою Pip (Pip Installs Packages).

$ pip install django
Collecting django
  Downloading Django-3.2.1-py3-none-any.whl (7.9 MB)
     |████████████████████████████████| 7.9 MB 344 kB/s 
Collecting asgiref<4,>=3.3.2
  Using cached asgiref-3.3.4-py3-none-any.whl (22 kB)
Collecting sqlparse>=0.2.2
  Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB)
Collecting pytz
  Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)
Installing collected packages: asgiref, sqlparse, pytz, django
Successfully installed asgiref-3.3.4 django-3.2.1 pytz-2021.1 sqlparse-0.4.1

Примітка: пам’ятайте, що $ – це не що інше, як ваш символ оболонки.

Щоб перевірити, чи правильно пройшло встановлення, ми знову перевіряємо встановлені пакунки нашого venv.

$ pip freeze
asgiref==3.3.4
Django==3.2.1
pytz==2021.1
sqlparse==0.4.1

Не хвилюйтеся, якщо ваші версії відрізняються від моїх. Якщо Django продовжує працювати на версії 3.x, ви можете продовжити без проблем.

Запуск проекту Django

Після того, як ви встановили Django, настав час створити структуру веб-сайту URL shortener. Ви пам’ятаєте, що таке проект Django? Давайте створимо його, виконавши таку команду.

django-admin startproject config

Пояснюючи все про цю команду, django-admin — це утиліта командного рядка, яка виконує всі необхідні завдання для створення проекту Django. Частина «startproject» — це команда, яку виконує утиліта Django-admin, а config — це назва проекту, який ми збираємося створити.

Важливо підкреслити, що конфігурація може мати будь-яке ім’я. Причина, чому я використовую config як назву цього проекту, полягає лише в зручності. Приємно перемикатися між проектами, але мати однакові імена. Тому не бійтеся використовувати інші назви проектів, коли забажаєте.

  Що таке GIF і як їх використовувати?

Як ви можете помітити, зараз у вас є папка config/, а всередині багато файлів. Пізніше ми побачимо файлову структуру проекту. А поки увійдемо в каталог проекту та запустимо локальний сервер.

cd config/

Найважливішим файлом, який ви будете використовувати, є сценарій manage.py. Він має ті ж функції, що й django-admin, але головною перевагою його використання є те, що ви можете керувати налаштуваннями під час запуску проекту.

Тепер перевіримо, чи все працює належним чином.

python manage.py runserver

Створення програми Url shortener

Настав час створити головний додаток проекту. Ви збираєтеся використовувати файл manage.py для виконання цього завдання.

python manage.py startapp urlshortener

Це створює програму Django з назвою urlshortener. Якщо ви запустите дерево команда, ви отримаєте щось подібне.

.
├── config
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── manage.py
└── urlshortener
    ├── admin.py
    ├── apps.py
    ├── __init__.py
    ├── migrations
    │   └── __init__.py
    ├── models.py
    ├── tests.py
    └── views.py

Давайте пояснимо різні файли, створені до цього моменту. «config» — це назва нашого проекту, і він названий так лише для згоди. Усередині config ви отримуєте settings.py, це файл, у якому ви встановлюєте всі параметри вашого проекту. urls.py — це загальна конфігурація URL-адрес у проекті. Він визначає URL-шляхи всіх додатків у проекті.

Не хвилюйтеся надто про файли asgi.py та wsgi.py. Це файли, які дозволяють налаштувати вашу програму під час розгортання.

Manage.py — це сценарій Python, який дозволяє запускати всі доступні команди Django-адмін.

Заглянувши всередину urlshortener, який є назвою програми, яку ви щойно створили, ви можете помітити, що там є дивна папка під назвою «migrations/» та деякі інші файли, які мають вирішальне значення для логіки будь-якої програми.

apps.py — це місце, де живе конфігурація програми. Зазвичай ви не возитеся з цим, за винятком того, що ви робите досить передові речі.

admin.py — це місце, де ви реєструєте свої моделі, щоб зробити їх видимими на панелі адміністратора Django.

models.py є найважливішим. Усередині цього модуля ви повинні визначити моделі, які (як би не чітко кажучи) є способом зберігання даних. Детальніше про моделі ви почуєте пізніше.

migrations/ — папка, де зберігаються міграції Django. Пізніше ми розглянемо це детально.

tests.py — це файл, у якому зберігаються тести. Ми не розглядатимемо тестування в цьому посібнику.

views.py — це файл, який зберігає перегляди. По суті, це визначає, як користувач взаємодіятиме з усіма аспектами вашої програми.

Встановлення програми Django

Перш ніж продовжити, відкрийте файл settings.py і змініть змінну INSTALLED_APPS, додавши програму urlshortener.

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Custom apps
    'urlshortener',
]

Це звичайний процес під час створення програми. Тож кожного разу, коли ви це робите, не забувайте встановлювати його в налаштуваннях проекту.

Розуміння шаблону MVT

Шаблон Model, View, Template — це шаблон проектування програмного забезпечення, який розробники Django використовують для створення веб-додатків.

Він базується на 3 основних концепціях. Модель (дані), Перегляд (Взаємодія користувача з даними), Шаблон (Як користувачі бачать дані).

Моделі — це класи Python, які визначають усі поля та поведінку даних, які ви бажаєте зберігати. Зазвичай кожна модель посилається на унікальну таблицю в базі даних

Представлення в найпростішому вираженні — це виклики, які приймають запит від користувача та генерують відповідь. Між цим процесом відбувається бізнес-логіка. Я знаю, що «бізнес-логіка» є досить незрозумілим поняттям, тому дозвольте мені пояснити, що це таке. Бізнес-логіка — це спосіб створення, зберігання та видалення даних, от і все.

Нарешті, шаблони — це текстові документи (зазвичай Html), які показуються користувачам. Його мета – представити дані якомога чистішими. Django містить міні-мову під назвою Мова шаблонів Django (DTL) що дозволяє використовувати деякі можливості Python у текстових документах.

Створіть модель Shortener

Після того, як ви швидко осягнете шаблон MVT, давайте приступимо до створення Django URL shortener з нуля.

Перш за все, давайте визначимо модель скорочення всередині файлу models.py.

'''
Url shortener model
'''

from django.db import models

# Create your models here.

class Shortener(models.Model):
    '''
    Creates a short url based on the long one
    
    created -> Hour and date a shortener was created 
    
    times_followed -> Times the shortened link has been followed

    long_url -> The original link

    short_url ->  shortened link https://domain/(short_url)
    ''' 
    created = models.DateTimeField(auto_now_add=True)

    times_followed = models.PositiveIntegerField(default=0)    

    long_url = models.URLField()

    short_url = models.CharField(max_length=15, unique=True, blank=True)

    class Meta:

        ordering = ["-created"]


    def __str__(self):

        return f'{self.long_url} to {self.short_url}'

Я знаю. Це досить великий клас, у якому відбувається багато дивних речей, але не впадайте у відчай. Я піду крок за кроком до кожної важливої ​​речі.

Пояснення моделі

Перш за все, ми імпортуємо модуль моделей. Цей модуль містить усі функції, необхідні для створення моделі Django.

Дивлячись на модель «Shortener», перше, що варто відзначити, це те, що вона розширює models.Model. Насправді будь-яка модель у будь-якій програмі Django має бути підкласом моделі.Модель клас.

Потім ми визначаємо всі поля, які матиме модель у базі даних. Поле «створено» — це дата й час створення скороченого посилання, тому ми використовуємо DateTimeField для створення такого роду функцій. Ми використовуємо аргумент auto_now_add=True, оскільки хочемо, щоб поле змінювалося лише під час створення екземпляра.

Друге поле times_followed вказує на кількість використань скороченої URL-адреси. Це PositiveIntegerField, і ми визначаємо значення за замовчуванням нуль. Це означає, що кожного разу, коли примірник створює поле times_followed, Django заповнює це поле 0.

З іншого боку, long_url посилається на URL-адресу, яку вводить користувач. Це URLField, оскільки ми хочемо, щоб користувач вводив лише символи форми: http://yoursite.com.

Останнє поле — short_url, і воно містить цікаві деталі. Ми вказуємо, що воно може містити лише 15 символів, воно має бути унікальним, тобто в цьому полі не можуть бути повторювані елементи. Нарешті, ми вказуємо, що його можна залишити порожнім, що означає, що під час роботи з формами користувачам не потрібно буде писати власний скорочений код.

Внутрішній клас Meta повідомляє нам, як повинен поводитися клас, і ми встановлюємо, що порядок (виклик Shortener.objects.all()) об’єктів shortener буде розрізнятися за останніми.

Метод __str__ повідомляє, як модель має бути надрукована. Отже, якщо у нас є об’єкт із long_url = “https://techukraine.net.com/” і скороченою частиною “123456”, ми друкуємо його.

https://techukraine.net.com/ to 123456

Тепер настав час знайти спосіб зберегти коротке посилання випадковим чином.

  Як виправити помилку «Цей пристрій не може запуститися». (Код 10)

Створення функціональності скорочення

Ми збираємося створити 2 спеціальні функції. Перший генеруватиме випадковий код, а другий запобігатиме повторенню випадкових кодів від моделі Shortener. Для цього створіть файл utils.py у програмі «urlshortener».

touch utils.py

Усередині цього файлу ми будемо використовувати функцію вибору з довільного вбудованого модуля. Це полегшує завдання вибору випадкових символів для створення коду.

'''
Utilities for Shortener
'''
from django.conf import settings

from random import choice

from string import ascii_letters, digits

# Try to get the value from the settings module
SIZE = getattr(settings, "MAXIMUM_URL_CHARS", 7)

AVAIABLE_CHARS = ascii_letters + digits


def create_random_code(chars=AVAIABLE_CHARS):
    """
    Creates a random string with the predetermined size
    """
    return "".join(
        [choice(chars) for _ in range(SIZE)]
    )

Як бачите, ця функція повертає випадковий рядок довжини, зазначеної у файлі налаштувань, або 7 за замовчуванням. Ви використовуєте функцію getattr, щоб отримати змінну з модуля налаштувань, але без повідомлення про помилку, якщо змінна не вказана.

Давайте трохи порахуємо. Якщо у нас є 7 місць, де може бути до 62 доступних символів для кожного місця, це можливо перестановки є:

Отже, виходячи з цих швидких розрахунків, скорочена частина може бути заповнена до 2,5 трильйонів різних кодів. Тож ми можемо забути про вихід із випадкових скорочених URL-адрес.

Хоча може існувати така кількість перестановок, є невелика ймовірність отримати повторювані скорочені частини. Це проблема, оскільки ми налаштували поле shortened_url як унікальне. Ось чому така корисна наступна функція.

def create_shortened_url(model_instance):
    random_code = create_random_code()
    # Gets the model class

    model_class = model_instance.__class__

    if model_class.objects.filter(short_url=random_code).exists():
        # Run the function again
        return create_shortened_url(model_instance)

    return random_code

Давайте подивимося, що тут відбувається. Функція приймає як аргумент екземпляр моделі «Shortener». По-перше, функція генерує випадковий код за допомогою create_random_code. Потім він отримує клас моделі та перевіряє, чи є будь-який інший об’єкт, який має такий самий short_url. Якщо це так, він запускається самостійно ще раз, але якщо все гаразд, він повертає random_code.

Пізніше ви будете взаємодіяти з оболонкою, щоб уважно розглянути цю функцію.

Після створення службової функції давайте використаємо її для створення випадкових кодів у моделі скорочення.

Зміна методу збереження

Наприкінці класу «Shortener» ви збираєтеся змінити метод збереження моделі. Метод save викликається кожного разу, коли об’єкт зберігається в базі даних, тому ми побачимо, як ним користуватися.

# Import the function used to create random codes
from .utils import create_shortened_url

# At the end of the  Shortener model
    def save(self, *args, **kwargs):

        # If the short url wasn't specified
        if not self.short_url:
            # We pass the model instance that is being saved
            self.short_url = create_shortened_url(self)

        super().save(*args, **kwargs)

Метод збереження перезаписується, що означає, що ви вводите нову функціональність у вже існуючий батьківський метод. По суті, це повідомляє Django, що кожного разу, коли об’єкт «Shortener» зберігається, а short_url не вказано, його потрібно заповнювати випадковим кодом.

Виконання міграцій

Тепер настав час зробити та запустити міграції моделі Shortener. Для цього виконайте наступні команди в кореневій папці проекту.

$ python manage.py makemigrations
Migrations for 'urlshortener':
  urlshortener/migrations/0001_initial.py
    - Create model Shortener

$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, urlshortener
Running migrations:
  ......
  # Apply the URL shortener migrations
  Applying urlshortener.0001_initial... OK

Наразі вам не потрібно турбуватися про те, що таке міграції. Просто майте на увазі, що під час виконання цих двох команд Django створює a база даних db.sqlite файл на основі визначених вами моделей.

Давайте створимо декілька об’єктів за допомогою оболонки Django.

$ python manage.py shell

>>> from urlshortener.models import Shortener
>>> s = Shortener(long_url="https://techukraine.net.com")
>>> s.short_url
''
>>> s.save()
>>> s.short_url
'kdWFVIc'
>>> s.long_url
'https://techukraine.net.com'
>>> print(s)
https://techukraine.net.com to kdWFVIc

Приблизно так працюватимуть усі об’єкти shortener.

Написання поглядів

Як я вже говорив раніше, представлення — це проста функція, яка приймає запит і повертає відповідь. Отже, давайте подивимося, як створити світогляд Hello World.

Базовий шаблон відповіді

Усередині файлу “urlshortener/views.py” створіть функцію home_view. аа

'''
Shortener views
'''
from django.shortcuts import render, get_object_or_404 # We will use it later

from django.http import HttpResponse 

# Create your views here.

def home_view(request):
    return HttpResponse("Hello world")

Він повертає просте повідомлення «Hello world». Пізніше ви побачите, як це виглядає в браузері. Тепер створіть “urls.py”, там будуть усі URL-шаблони програми.

торкніться urls.py

Додайте наступний код.

'''
Urls for shortener app urlshortener/urls.py
'''

from django.urls import path

# Import the home view
from .views import home_view

appname = "shortener"

urlpatterns = [
    # Home view
    path("", home_view, name="home")
]

Змінна appname оголошує (як випливає з назви) простір імен програми urlshortener.

Швидко пояснюючи, що ми імпортуємо функція шляху, який повертає елемент для включення до url-шаблонів програми. Атрибут name — це простір імен шляху, який за потреби можна викликати всередині шаблонів.

Тепер давайте змінимо загальні URL-адреси проекту.

# config/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    
    # Shortener Urls
    path('', include('urlshortener.urls'))
]

Тепер знову запустимо сервер.

python manage.py runserver

Якщо ви запустите сервер, ви отримаєте просте повідомлення «Hello world». Це пов’язано з тим, що ви включаєте шаблони URL-адрес із програми URL-скорочення до загального проекту.

Це лише відправна точка. Тепер настав час створити форму, яка дозволить користувачеві самостійно створювати скорочені URL-адреси.

Створення форм

У Django, a форму це простий клас, який дозволяє отримувати дані від користувача.

Ви збираєтеся створити файл forms.py. Умовно зберігати всі форми програми в цьому файлі.

cd urlshortener/
touch forms.py

Усередині цього файлу ви збираєтеся створити клас «ShortenerForm», який розширюється від «ModelForm».

'''
Shortener Forms urlshortener/forms.py
'''

from django import forms

from .models import Shortener

class ShortenerForm(forms.ModelForm):
    
    long_url = forms.URLField(widget=forms.URLInput(
        attrs={"class": "form-control form-control-lg", "placeholder": "Your URL to shorten"}))
    
    class Meta:
        model = Shortener

        fields = ('long_url',)

Це модельна форма, оскільки її метою є створення об’єкта моделі з введених користувачем даних. Ми також використовуємо аргумент widget, який дозволяє вказати атрибут «class» (клас у CSS, а не python). Це пояснюється тим, що пізніше ми збираємося стилізувати програму за допомогою початкового завантаження.

Завершення переглядів

Після створення форм настає час створити остаточну бізнес-логіку програми.

Перейдіть до файлу views.py у програмі скорочення та змініть вигляд home_view. Ви можете перевірити Репо Github в цей момент отримати уявлення про те, як виглядає структура проекту.

Існує два види програми URL shortener:

  • Домашня сторінка: тут показано скорочену форму та нову URL-адресу, якщо форму вже надіслано.
  • Перегляд переспрямування: це переспрямовує на довгу URL-адресу та додає 1 до кількості переходів.
  •   4 Програмне забезпечення для керування терміном служби батареї та продуктивністю ноутбука

    Почнемо з вигляду будинку, який є найскладнішим. Вам потрібно буде імпортувати модель і форму Shortener. Ви все ще використовуєте функцію, тому що я хочу, щоб ви зрозуміли весь потік даних представлення. Крім того, ви використовуватимете шлях для шаблону (який ще не створено).

    Домашній вигляд

    '''
    Shortener views
    '''
    from django.shortcuts import render # We will use it later
    
    from django.http import HttpResponse, Http404, HttpResponseRedirect
    
    
    # Model
    from .models import Shortener
    
    # Custom form
    
    from .forms import ShortenerForm
    
    # Create your views here.
    
    def home_view(request):
        
        template="urlshortener/home.html"
    
        
        context = {}
    
        # Empty form
        context['form'] = ShortenerForm()
    
        if request.method == 'GET':
            return render(request, template, context)
    
        elif request.method == 'POST':
    
            used_form = ShortenerForm(request.POST)
    
            if used_form.is_valid():
                
                shortened_object = used_form.save()
    
                new_url = request.build_absolute_uri('/') + shortened_object.short_url
                
                long_url = shortened_object.long_url 
                 
                context['new_url']  = new_url
                context['long_url'] = long_url
                 
                return render(request, template, context)
    
            context['errors'] = used_form.errors
    
            return render(request, template, context)
    

    Подання базується на двох умовах:

  • Коли метод HTTP дорівнює GET: ми лише передаємо як контекст форму Shortener, яка використовується для створення об’єктів Shortener.
  • Коли метод HTTP дорівнює POST: ми все ще передаємо форму в контексті, оскільки хочемо, щоб користувач міг ввести іншу URL-адресу. Але ми передаємо запит Post в іншу форму під назвою used_form.
  • Хитрий спосіб динамічного отримання повної URL-адреси сайту — використання методу об’єкта запиту build_absolute_uri.

    >>> print(request.build_absolute_uri('/'))
    'https://localhost:8080/'

    Як безпечний спосіб обробки неправильного запиту (користувач не ввів дійсну URL-адресу), ми отримуємо помилки форми, передаємо їх як контекст і відображаємо шаблон як звичайний. Пізніше ви побачите, як реалізувати відображення помилок у шаблоні.

    Перенаправити перегляд

    redirect_url_view трохи простіше. Це детальний перегляд, що означає, що перегляд працює лише з об’єктом.

    Ця функція приймає як параметри запит користувача та shortened_part URL-адреси. Немає необхідності вказувати тип запиту, який ми отримуємо, оскільки ми не працюємо з формами в цьому поданні.

    def redirect_url_view(request, shortened_part):
    
        try:
            shortener = Shortener.objects.get(short_url=shortened_part)
    
            shortener.times_followed += 1        
    
            shortener.save()
            
            return HttpResponseRedirect(shortener.long_url)
            
        except:
            raise Http404('Sorry this link is broken :(')

    Ми захищаємо представлення оператором try/except на випадок, якщо скорочена частина не знайдена в базі даних. Якщо об’єкт знайдено, він додає 1 до поля times_followed і перенаправляє за допомогою функції HttpResponseRedirect на URL-адресу сайту, що відповідає випадковому коду.

    Оновлення URL-адрес

    Коли ви створили два представлення програми, настав час створити шаблони кінцевих URL-адрес, включивши шлях до redirect_url_view.

    Як завжди, ви починаєте з імпортування представлень, а потім створюєте функцію шляху та передаєте як аргументи:

    • URL-маршрут
    • Вид, що вказує на шлях
    • Назва шляху
    '''
    Urls for shortener app urlshortener/urls.py
    '''
    
    from django.urls import path
    
    # Import the home view
    from .views import home_view, redirect_url_view
    
    appname = "shortener"
    
    urlpatterns = [
        # Home view
        path('', home_view, name="home"),
        path('<str:shortened_part>', redirect_url_view, name="redirect"),
    ]
    

    З таким налаштуванням URL-адреси маршрутизація програми виглядає так.

    • localhost:8000/: Домашня сторінка
    • localhost:8000/URL-code: Переспрямування на довгу URL-адресу

    Створення шаблонів

    Ви майже там. Єдине, що відокремлює вас від створення цієї програми, це інтерфейс користувача. Для цього ми використовуємо шаблони Django.

    Шаблони використовуються для відтворення чистого інтерфейсу для користувача програми. Ці файли створюються всередині програми в подвійній структурі папок у формі: «templates/appname»

    # urlshortener directory
    mkdir -p templates/urlshortener/

    Примітка. Подвійна структура папок і мова шаблонів Django виходять за рамки цього посібника, але ви можете прочитати про них у офіційна документація.

    Базовий шаблон

    Django дозволяє успадковувати шаблони. Це означає, що ми можемо мати базовий шаблон і розширювати його з метою дотримання принципу DRY (не повторюйся).

    cd templates/urlshortener
    touch base.html

    Файл base.html є умовним і означає, що кожен інший шаблон у програмі має бути розширенням цього.

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Django Url shortener</title>
    
        <link
          href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
          rel="stylesheet"
          integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0"
          crossorigin="anonymous"
        />
    
        <link
          rel="stylesheet"
          href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"
          integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w=="
          crossorigin="anonymous"
        />
      </head>
      <body>
       
        {% block body %} 
       
       
        
        {% endblock body %}
        
        <script
          src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
          integrity="sha384-p34f1UUtsS3wqzfto5wAAmdvj+osOnFyQFpp4Ua3gs/ZVWx6oOypYoCJhGGScy+8"
          crossorigin="anonymous"
        ></script>
      </body>
    </html>
    

    Ми збираємося використовувати завантажувальний CDN, щоб створити швидкий і гарний інтерфейс без потреби у файлах CSS або javascript.

    Якщо ви хочете глибше дізнатися про теги DTL, ви можете зробити це за допомогою офіційні документи.

    Домашній шаблон

    Домашній шаблон, похідний від файлу base.html. Це означає, що цей шаблон включає весь HTML із батьківського файлу.

    {% extends 'urlshortener/base.html' %} 
    
    {% block body %}
    
    <div class="container">
      <div class="card mt-5">
        <div class="card-header text-center py-3">
          <h1>URL Shortner Application <i class="fas fa-link px-2"></i></h1>
        </div>
        <div class="px-3 py-4">
          <form action="" method="POST">
            {% csrf_token %}
            <div class="row g-1">
              <div class="col-10">{{form.long_url}}</div>
              <div class="col-2">
                <button class="btn btn-success btn-lg w-100" type="submit">
                  Shorten
                </button>
              </div>
            </div>
          </form>
        </div>
      </div>
      {% if errors %}
      <div class="alert alert-danger mt-4" role="alert">
        <p>{{errors}}</p>
      </div>
      {% endif %}
    
      {% if new_url %}
    
      <div class="mx-auto text-center mt-5">
        <h2 class="text-danger">Your shortened Url</h2>
        <p>You can copy the Link below and share it with your friends</p>
        <p class="">{{new_url}}</p>
        <p><span class="text-danger">Previous URL:</span> {{long_url}}</p>
      </div>
      {% endif %}
    </div>
    {% endblock body %}

    Я швидко поясню потік даних цього шаблону:

    • Відобразиться форма Shortener. Всередині, токен crsf встановлено (з міркувань безпеки), і відображається лише поле довгої URL-адреси форми. Пам’ятайте, що це поле має клас CSS «form-control form-control-lg», оскільки ми встановлюємо його у формі.
    • Якщо виявлені помилки, покажіть їх
    • Якщо операція POST завершиться успішно, буде показано нову URL-адресу.

    Остаточне застосування

    Щиро вітаю! 🎉. Ви створили повну функціональну програму скорочення URL-адрес за допомогою Django.

    Ось кілька скріншотів того, як виглядає програма.

    Отримати тільки:

    Помилка скорочення URL:

    Успішна скорочена URL-адреса:

    URL-адреса переспрямована:

    Що ви думаєте про демонстрацію цієї програми для скорочення URL-адрес комусь? Перевірте, як виставити демонстраційну програму Django в Інтернеті.

    Виклик 🔥

    Якщо ви відчуваєте себе комфортно зі своїми навичками Django, чому б не потренуватися з викликом?.

    Склонуйте код цієї програми та створіть систему автентифікації, де лише зареєстровані користувачі зможуть скорочувати свої URL-адреси.

    Коли ви закінчите, надішліть запит на отримання та запитайте мене Twitter щоб продемонструвати свої досягнення.

    Підведенню

    Ви дійшли до кінця цього підручника. Вірте чи ні, але ви щойно розглянули всі основні аспекти створення проекту Django. Сподіваюся, він був для вас надзвичайно корисним.

    У цьому посібнику ви:

    • Дізналися про робочий процес створення програми Django.
    • Створив проект резюме
    • Зрозумів відмінності та структуру проектів Django та програм Django.
    • Виявлено шаблон MVT.
    • Створено базові подання функції
    • Використовував Django ORM (Object Relational Mapper) для створення простих моделей

    Ось і все, є чим зайнятися Веб-фреймворк Djangoтому залишайтеся на зв’язку, щоб отримати більше чудових посібників.