Руководство по созданию приложения для сокращения URL-адресов с помощью Django
Опубликовано: 2021-05-09Лучший способ изучить Django или любой другой навык - это применить полученные знания при создании функциональных проектов.
Django - наиболее часто используемый фреймворк для веб-разработки Python. Его встроенные функции и большое количество сторонних пакетов сделали его одним из самых любимых веб-фреймворков во всем мире.
Он быстрый, надежный и имеет множество встроенных функций. Например, система проверки подлинности дыр, которая позволяет вам сосредоточиться на основных функциях вашего приложения. Кроме того, вы можете установить внешние пакеты для выполнения еще более сложных задач, таких как Django-allauth , который позволяет вам регистрировать пользователей с их учетными записями в социальных Django-allauth .
Но давайте раскроем некоторые факты. Django - это такой огромный фреймворк, что иногда сложно начать с ним.
Итак, сегодня вы собираетесь создать с нуля полностью функциональное приложение Django.
К концу этого урока вы:
- Написали приложение для сокращения URL
- Понять шаблон Django MVT
- Узнали рабочий процесс создания проекта
Предварительно требования
Все следующие требования не являются обязательными и помогут вам следовать инструкциям. Но если у вас нет опыта работы с ними, не волнуйтесь. Самый важный шаг - это первый.
- Базовое понимание команд UNIX (ls, cd, rm, touch)
- Базовое понимание классов и функций Python
- Python установлен на вашем компьютере (возможно, очевидно, но мне пришлось его включить)
- Было бы здорово, если бы вы уже что-то построили с Django
Весь рабочий код будет доступен в этом репозитории Github.
Теперь, когда у вас есть кристально ясные предыдущие концепции, давайте перейдем к делу.
Заявление о проекте
В этом руководстве вы собираетесь создать средство сокращения URL-адресов. По сути, сокращение URL-адресов - это служба, которая берет длинный URL-адрес и превращает его в компактный.
Например, если вы хотите поделиться твитом и хотите включить ссылку на свой веб-сайт, но вы столкнулись с ограничением количества символов, вы можете использовать сокращение URL-адресов.
Посмотрим на графику.

Как видите, средство сокращения URL-адресов получает длинный URL-адрес и возвращает короткий. Это именно то, что вы собираетесь построить сегодня.
В этом проекте вы попрактикуетесь в использовании шаблона MVT, изучите основы проектирования баз данных с помощью моделей Django и научитесь показывать информацию пользователю с помощью представлений, URL-адресов и шаблонов.
Структура проекта Django
По сути, веб-сайт Django построен на одном проекте и нескольких отдельных приложениях . Каждое из этих приложений имеет определенные функции и может работать само по себе.
Представим себе сложное веб-приложение, такое как Stackoverflow. Его функциональность основана на двух основных аспектах.
- Управление пользователями: вход, выход, репутация, разрешения
- Форум: вопросы, ответы, теги, фильтры
Итак, следуя структуре веб-сайта 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 и создайте виртуальное имя .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-адресов. Вы помните, что такое проект Django? Давайте создадим его, выполнив следующую команду.
django-admin startproject config Объясняя все об этой команде, django-admin - это утилита командной строки, которая выполняет все необходимые задачи для создания проекта Django. Часть «startproject» - это команда, запускаемая утилитой Django-admin, а config - это имя проекта, который мы собираемся создать.
Важно подчеркнуть, что config может иметь любое имя. Причина, по которой я использую config в качестве названия этого проекта, просто из-за удобства. Приятно переключаться между проектами, сохраняя при этом то же соглашение об именах. Так что не бойтесь использовать другие названия проектов, когда захотите.
Как вы могли заметить, теперь у вас есть папка config /, а внутри много файлов. Позже мы увидим файловую структуру проекта. А пока давайте войдем в каталог проекта и запустим локальный сервер.
cd config/Самый важный файл, который вы будете использовать, - это скрипт manage.py . Он имеет ту же функциональность, что и django-admin , но главное преимущество его использования заключается в том, что вы можете управлять настройками при запуске проекта.
Теперь посмотрим, все ли работает правильно.
python manage.py runserver 
Создание приложения для сокращения URL-адресов
Пришло время создать основное приложение проекта. Вы собираетесь использовать файл manage.py для выполнения этой задачи.
python manage.py startapp urlshortenerЭто создает приложение Django с именем urlshortener . Если вы запустите команду tree, вы получите что-то вроде этого.
. ├── 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-admin.
urlshortener внутрь 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
Шаблон "Модель, представление, шаблон" - это шаблон проектирования программного обеспечения, который разработчики Django используют для создания веб-приложений.

В его основе лежат 3 основные концепции. Модель (данные), Представление (Взаимодействие пользователя с данными), Шаблон (Как пользователи видят данные).
Модели - это классы Python, которые определяют все поля и поведение данных, которые вы хотите хранить. Обычно каждая модель относится к уникальной таблице в базе данных.
Представления в их простейшем выражении - это вызываемые объекты, которые принимают запрос от пользователя и генерируют ответ. Между этим процессом возникает бизнес-логика. Я знаю, что «бизнес-логика» - довольно непонятное понятие, поэтому позвольте мне объяснить, что это такое. Бизнес-логика - это способ создания, хранения и удаления данных, вот и все.
Наконец, шаблоны - это текстовые документы (обычно Html), которые показываются пользователям. Его цель - представить данные как можно более чистыми. Django включает в себя мини-язык, называемый языком шаблонов Django (DTL), который позволяет вам использовать некоторые возможности python в текстовых документах.
Создайте модель Shortener
После того, как вы быстро разберетесь с шаблоном MVT, давайте приступим к созданию сокращателя URL-адресов Django с нуля.
Прежде всего, давайте определим модель сокращения внутри файла 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}'Я знаю. Это довольно большой класс, в котором происходит много странных вещей, но не отчаивайтесь. Я прохожу шаг за шагом по каждому важному вопросу.
Описание модели
Прежде всего, мы импортируем модуль models . Этот модуль содержит все функции, необходимые для создания модели Django.
Взглянув на модель «Shortener», первое, что следует отметить, это то, что она расширяет models.Model . Фактически, любая модель в любом приложении Django должна быть подклассом класса models.Model.
Затем мы определяем все поля, которые модель будет иметь в базе данных. Поле «created» - это дата и время создания сокращенной ссылки, поэтому мы используем DateTimeField для создания такой функциональности. Мы используем аргумент auto_now_add = True, потому что мы хотим, чтобы поле изменялось только при создании экземпляра.
Второе поле times_followed указывает, times_followed раз использовался сокращенный URL. Это PositiveIntegerField, и мы указываем значение по умолчанию, равное нулю. Это означает, что каждый раз, когда экземпляр создает поле times_followed , Django заполняет это поле times_followed .
С другой стороны, long_url относится к URL-адресу, который вводит пользователь. Это URLField , потому что мы хотим, чтобы пользователь вводил только символы формы: http://yoursite.com .
Последнее поле - short_url , и в нем есть интересные детали. Мы указываем, что оно может иметь длину не более 15 символов, оно должно быть уникальным, что означает, что в этом поле не может быть повторяющихся элементов. Наконец, мы указываем, что его можно оставить пустым, что означает, что при работе с формами пользователям не нужно будет писать собственный сокращенный код.
Внутренний класс Meta сообщает нам, как должен вести себя класс, и мы устанавливаем, что порядок (вызов Shortener.objects.all () ) объектов сокращения будет отличаться от самых последних.
Метод __str__ сообщает, как модель должна быть напечатана. Итак, если у нас есть объект с long_url = «https://geekflare.com/» и сокращенной частью «123456», мы его печатаем.
https://geekflare.com/ to 123456Пришло время найти способ сохранить короткую ссылку случайным образом.
Создание функции сокращения
Мы собираемся создать 2 пользовательские функции. Первый будет генерировать случайный код, а второй предотвратит получение повторяющихся случайных кодов из модели Shortener. Для этого создайте файл utils.py внутри приложения urlshortener.
touch utils.pyВнутри этого файла мы собираемся использовать функцию выбора из встроенного модуля random. Это облегчает задачу выбора случайных символов для создания кода.
''' 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 создает файл базы данных db.sqlite на основе определенных вами моделей.
Создадим несколько объектов с помощью оболочки Django.
$ python manage.py shell >>> from urlshortener.models import Shortener >>> s = Shortener(long_url="https://geekflare.com") >>> s.short_url '' >>> s.save() >>> s.short_url 'kdWFVIc' >>> s.long_url 'https://geekflare.com' >>> print(s) https://geekflare.com to kdWFVIcПримерно так будут работать все объекты сокращения.
Написание просмотров
Как я уже сказал, представление - это простая функция, которая принимает запрос и возвращает ответ. Итак, давайте посмотрим, как создать приветственное мировоззрение.
Базовый шаблон ответа
Внутри файла 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-адресов приложения.
touch 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 форма - это простой класс, который позволяет получать данные от пользователя.
Вы собираетесь создать файл 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',)Это модельная форма, поскольку ее цель - создать объект модели из пользовательского ввода. Мы также используем аргумент виджета, который позволяет нам указать атрибут «class» (класс в CSS, а не в python). Это потому, что мы собираемся стилизовать приложение с помощью начальной загрузки позже.
Завершение просмотров
После построения форм пора создать финальную бизнес-логику приложения.
Перейдите к файлу views.py в приложении сокращения и измените представление home_view . Вы можете проверить репозиторий Github прямо сейчас, чтобы получить представление о том, как выглядит структура проекта.
Приложение для сокращения URL-адресов имеет два представления:
- Домашнее представление: показывает сокращенную форму и новый URL-адрес, если форма уже была отправлена.
- Представление перенаправления: это перенаправляет на длинный URL-адрес и добавляет 1 к последующему времени.
Начнем с домашнего вида, который является наиболее сложным. Вам нужно будет импортировать модель и форму 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.
build_absolute_uri способ динамического получения полного URL-адреса сайта - использование метода объекта запроса build_absolute_uri .
>>> print(request.build_absolute_uri('/')) 'https://localhost:8080/'В качестве безопасного способа обработки неправильного запроса (пользователь не ввел действительный URL-адрес) мы получаем ошибки формы, передаем их в качестве контекста и отображаем шаблон как обычно. Позже вы увидите, как реализовать отображение ошибок в шаблоне.
Перенаправить просмотр
redirect_url_view немного проще. Это подробный вид, что означает, что вид работает только с объектом.
Эта функция принимает в качестве параметров запрос пользователя и сокращенную_часть 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.
Шаблоны используются для визуализации понятного интерфейса для пользователя приложения. Эти файлы создаются внутри приложения в виде двойной структуры папок в форме: «шаблоны / имя приложения».
# urlshortener directory mkdir -p templates/urlshortener/Примечание . Двойная структура папок и язык шаблонов Django выходят за рамки этого руководства, но вы можете прочитать о них в официальной документации.
Базовый шаблон
Django допускает наследование шаблонов. Это означает, что мы можем иметь базовый шаблон и расширять его, следуя принципу СУХОЙ (Не повторяйся).
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 %}Я быстро объясню поток данных этого шаблона:
- Отобразится форма «Сокращение». Внутри установлен токен 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, так что оставайтесь на связи, чтобы получить больше интересных руководств.
