Водич за прављење апликације за скраћивање УРЛ-ова помоћу Дјанга

Најбољи начин да научите Дјанго, или било коју вештину, је примена знања које имате креирањем функционалних пројеката.

Дјанго је најчешће коришћени Питхон оквир за веб развој. Његове уграђене функције и велики број пакета треће стране учинили су га једним од најомиљенијих веб оквира широм света.

Брз је, поуздан и има много уграђених функција. На пример, систем за аутентификацију рупа, који вам омогућава да се фокусирате на главне карактеристике ваше апликације. Такође, можете инсталирати екстерне пакете за обављање још сложенијих задатака, као што је Дјанго-аллаутх, који вам омогућава да региструјете кориснике са њиховим друштвеним налозима.

Али хајде да изнесемо неке чињенице. Дјанго је тако огроман оквир да је понекад тешко започети са њим.

Дакле, данас ћете направити од нуле потпуно функционалну Дјанго апликацију.

До краја овог водича ћете:

  • Написали сте апликацију за скраћивање УРЛ-ова
  • Разумети Дјанго МВТ образац
  • Научили сте ток рада креирања пројекта

Предуслови

Сви следећи захтеви су опциони и помоћи ће вам да пратите упутства. Али ако немате искуства са било којим од ових, не брините. Најважнији корак је први.

  • Основно разумевање УНИКС команди (лс, цд, рм, тоуцх)
  • Основно разумевање Питхон класа и функција
  • Питхон инсталиран на вашем рачунару (можда очигледно, али морао сам да га укључим)
  • Било би сјајно ако сте већ направили нешто са Дјангом

Сав радни код ће бити доступан на овоме Гитхуб репо.

Сада када су вам претходни концепти били кристално јасни, хајде да пређемо на ствар.

Изјава о пројекту

У овом водичу ћете направити скраћивач УРЛ-ова. У основи, скраћивач УРЛ-а је услуга која узима дугачку УРЛ адресу и претвара је у компактну.

На пример, ако желите да поделите твит и желите да укључите везу до своје веб локације, али се суочавате са ограничењем броја знакова, можете да користите скраћивач УРЛ-а.

Хајде да то видимо са графиком.

Као што видите, скраћивач УРЛ-ова добија дугачку УРЛ адресу и враћа кратку. То је управо оно што ћете данас изградити.

Са овим пројектом ћете вежбати употребу МВТ шаблона, научити основе дизајна базе података помоћу Дјанго модела и научити како да прикажете информације кориснику кроз приказе, УРЛ адресе и шаблоне.

Структура Дјанго пројекта

У основи, Дјанго веб локација је изграђена на једном пројекту и више одвојених апликација. Свака од ових апликација има специфичну функционалност и може сама да ради.

Замислимо сложену веб апликацију као што је Стацковерфлов. Његова функционалност се заснива на два главна аспекта.

  • Управљање корисницима: пријављивање, одјава, репутација, дозволе
  • Форум: Питања, одговори, ознаке, филтери

Дакле, пратећи структуру Дјанго веб локације, пројекат би се звао СтацкОверфлов који има две главне апликације. Корисничка апликација и апликација форум.

Свака од ових апликација има самосталну функционалност. То значи да оба садрже сав код који им је потребан за исправан рад.

То укључује моделе (структуру базе података), приказе (захтјеве и одговоре), специфичне УРЛ обрасце и, наравно, шаблоне и статичке датотеке (слике, ЦСС, ЈаваСцрипт). То значи да се свака Дјанго апликација може поново користити јер може сама да ради.

Скраћивањем, пројекат се односи на скуп конфигурација и апликација који су намењени за прављење веб апликације. С друге стране, Дјанго апликација је део пројекта, који је самосталан (има све што је потребно за рад), а његова сврха је да изврши одређену операцију.

Подесите Дјанго пројекат

У овом одељку ћете поставити Дјанго пројекат. У ту сврху ћете користити различите алате попут виртуелног окружења да организујете Питхон зависности и најважније Дјанго скрипте. Дјанго-админ и манаге.пи

Виртуелно окружење

Увек препоручујем рад са виртуелна окружења када правите апликације помоћу Дјанга. То је најефикаснији начин одржавања одређеног скупа зависности. Али његова главна сврха је да изолује развојне пакете од глобалних.

Дакле, хајде да направимо виртуелно окружење са Питхон-ом уграђеном командом форме.

Напомена: Овај метод захтева Питхон 3.6 или новије верзије да би функционисао.

python -m venv .venv

Ова команда користи команду питхон -м или питхон –мод. У основи, покреће модул или библиотеку, као скрипту. Према значењу ове команде, венв је библиотека коју покрећемо, а .венв се односи на име виртуелног окружења које желимо да креирамо.

Дакле, на простом језику, ова команда значи.

Хеј Питхон, покрените као скрипту уграђену библиотеку венв и креирајте виртуаленв име .венв

Сада је време да активирамо виртуелно окружење које смо управо креирали, помоћу следеће команде.

source .venv/bin/activate

Да бисте потврдили да имате нула пакета инсталираних у новом венв-у, покрените.

pip freeze

Ако сте исправно активирали виртуелно окружење, нећете добити никакав излаз. То је зато што још ништа нисмо инсталирали.

Хајдемо у Дјанго

Да бисмо креирали нашу апликацију за скраћивање УРЛ-ова, почећемо тако што ћемо инсталирати Дјанго пакет. Дјанго је пакет треће стране, стога морамо да га инсталирамо са Пип-ом (Пип Инсталлс Пацкагес).

$ 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

Напомена: Запамтите да $ није ништа друго до ваш симбол љуске.

Да бисмо проверили да ли је инсталација прошла исправно, поново проверавамо инсталиране пакете нашег венв-а.

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

Не брините ако се верзије које добијете разликују од мојих. Ако Дјанго остане на верзији 3.к, можете наставити без икаквих проблема.

Покретање Дјанго пројекта

Када инсталирате Дјанго, време је да креирате структуру веб странице за скраћивање УРЛ адреса. Да ли се сећате шта је Дјанго пројекат? Хајде да га направимо тако што ћемо покренути следећу команду.

django-admin startproject config

Објашњавајући све о овој команди, дјанго-админ је услужни програм командне линије који обавља све потребне задатке за креирање Дјанго пројекта. Део „стартпројецт“ је команда коју покреће услужни програм Дјанго-админ, а цонфиг је назив пројекта који ћемо креирати.

  Како да прилагодите Спотлигхт Сеарцх на иПхоне-у и иПад-у

Важно је нагласити да конфигурација може бити било које име које желите. Разлог зашто користим цонфиг као назив овог пројекта је само због погодности. Лепо је прелазити са једног пројекта на други, а да и даље имате исту конвенцију именовања. Зато се немојте плашити коришћења других назива пројеката кад год желите.

Као што можете приметити сада имате цонфиг/ фолдер и унутра се налази много датотека. Касније ћемо видети структуру датотеке пројекта. За сада, уђимо у директоријум пројекта и покренимо локални сервер.

cd config/

Најважнија датотека коју ћете користити је скрипта манаге.пи. Има исту функционалност као дјанго-админ, али главна предност његовог коришћења је то што вам омогућава да управљате подешавањима приликом покретања пројекта.

Сада да видимо да ли све ради како треба.

python manage.py runserver

Креирање апликације за скраћивање УРЛ-ова

Време је да направите главну апликацију пројекта. Користићете датотеку манаге.пи да бисте извршили овај задатак.

python manage.py startapp 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

Хајде да разјаснимо различите датотеке креиране до овог тренутка. „цонфиг“ је назив нашег пројекта и тако је назван само због конвенције. Унутар конфигурације добијате сеттингс.пи, то је датотека у којој постављате сва подешавања вашег пројекта. урлс.пи је укупна конфигурација УРЛ-ова унутар пројекта. Дефинише УРЛ путање свих апликација унутар пројекта.

Не брините превише о датотекама асги.пи и всги.пи. Ово су датотеке које вам омогућавају да конфигуришете своју апликацију у примени.

манаге.пи је питхон скрипта која вам омогућава да покренете све доступне команде Дјанго-админ.

Ако погледате у урлсхортенер, што је назив апликације коју сте управо креирали, можда ћете приметити да постоји чудна фасцикла која се зове „миграције/“ и неке друге датотеке које су кључне за логику било које апликације.

аппс.пи је место где живи конфигурација апликације. Обично се не петљате око тога, осим што радите прилично напредне ствари.

админ.пи је место где региструјете своје моделе да бисте их учинили видљивим унутар Дјанго админ панела.

моделс.пи је најважнији. Унутар овог модула морате дефинисати моделе, који су (нејасно речено) начин на који се подаци чувају. Касније ћете чути више о моделима.

миграције/ је фасцикла у којој се чувају Дјанго миграције. Касније ћемо детаљније погледати.

тестс.пи је датотека у којој се чувају тестови. У овом водичу нећемо покривати тестирање.

виевс.пи је датотека која чува приказе. У суштини, дефинише како ће корисник комуницирати са свим аспектима ваше апликације.

Инсталирање Дјанго апликације

Пре него што наставите, отворите датотеку сеттингс.пи и измените променљиву ИНСТАЛЛЕД_АППС додавањем апликације урлсхортенер.

# 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',
]

Ово је рутински процес када креирате апликацију. Зато сваки пут када то урадите, не заборавите да га инсталирате у поставкама пројекта.

Разумевање МВТ обрасца

Образац Модел, Виев, Темплате је образац дизајна софтвера који Дјанго програмери користе за креирање веб апликација.

Заснован је на 3 главна концепта. Модел (подаци), Приказ (интеракција корисника са подацима), Шаблон (Како корисници виде податке).

Модели су Питхон класе, које дефинишу сва поља и понашање података које сте вољни да ускладиштите. Обично се сваки модел односи на јединствену табелу у бази података

Погледи у свом најједноставнијем изразу су позиви који примају захтев од корисника и генеришу одговор. Између тог процеса јавља се пословна логика. Знам да је „пословна логика“ прилично нејасан концепт, па да објасним шта је тачно. Пословна логика је начин на који се подаци креирају, чувају и бришу, то је све.

Коначно, шаблони су текстуални документи (обично Хтмл) који се приказују корисницима. Његова сврха је да прикаже податке што је могуће чистије. Дјанго укључује мини-језик тзв Дјанго шаблонски језик (ДТЛ) што вам омогућава да у текстуалне документе уградите неке од моћи Питхон-а.

Креирајте модел Схортенер

Када сте брзо схватили МВТ образац, хајде да кренемо у креирање Дјанго УРЛ скраћивача од нуле.

Пре свега, хајде да дефинишемо модел скраћивача унутар датотеке моделс.пи.

'''
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}'

Знам. То је прилично огроман час, са много чудних ствари које се дешавају, али не очајавајте. Ићи ћу корак по корак о свакој важној ствари.

Објашњење модела

Пре свега, увозимо модул модела. Овај модул садржи сву функционалност која нам је потребна за креирање Дјанго модела.

Када погледамо модел “Схортенер”, прва ствар коју треба приметити је да он проширује моделе.Модел. У ствари, сваки модел у било којој Дјанго апликацији мора бити подкласа модели.Модел класа.

Затим дефинишемо сва поља која ће модел имати у бази података. Поље „направљено“ је датум и време креирања скраћене везе, стога користимо ДатеТимеФиелд за креирање ове врсте функционалности. Користимо аргумент ауто_нов_адд=Труе јер желимо да се поље мења само када се инстанца креира.

Друго поље тимес_фолловед се односи на времена када је скраћени УРЛ коришћен. То је ПоситивеИнтегерФиелд и наводимо подразумевану вредност нула. То значи да сваки пут када инстанца креира поље тимес_фолловед, Дјанго ће то поље попунити са 0.

С друге стране, лонг_урл се односи на УРЛ који корисник уноси. То је УРЛФиелд, јер желимо само да корисник унесе знакове у облику: хттп://ваш сајт.цом.

Последње поље је схорт_урл и има занимљиве детаље. Наводимо да може бити само 15 карактера, мора бити јединствен, што значи да се у том пољу не могу понављати елементи. На крају, указујемо да се може оставити празним, што значи да приликом рада са обрасцима корисници неће морати да пишу сопствени скраћени код.

  Шта значи „ФТФИ“ и како га користите?

Мета унутрашња класа нам говори како класа мора да се понаша, а ми постављамо да ће редослед (позивањем Схортенер.објецтс.алл()) објеката скраћивача бити дискриминисан најновијим.

Метода __стр__ говори како модел мора бити одштампан. Дакле, ако имамо објекат са лонг_урл = „хттпс://вдзвдз.цом/“ и скраћеним делом „123456“, и ми га штампамо.

https://techblog.co.rs.com/ to 123456

Сада је време да потражите начин да сачувате кратку везу на насумичан начин.

Креирање функционалности скраћивања

Креираћемо 2 прилагођене функције. Први ће генерисати насумични код, а други ће спречити добијање поновљених насумичних кодова из Схортенер модела. Да бисте то урадили, креирајте датотеку утилс.пи унутар апликације „урлсхортенер“.

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. Користите функцију гетаттр да бисте добили променљиву из модула подешавања, али без грешке ако променљива није наведена.

Хајде да мало израчунамо. Ако имамо 7 места где може бити до 62 доступна карактера за свако место, могуће пермутације су:

Дакле, на основу ових брзих прорачуна, скраћени део може да се попуни до 2,5 трилиона различитих кодова. Тако да можемо заборавити на излазак из насумичних скраћених УРЛ-ова.

Иако може постојати толико пермутација, мала је вероватноћа да ће се скраћени делови поновити. Ово је проблем јер смо подесили поље схортенед_урл да буде јединствено. Зато је следећа функција толико корисна.

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

Хајде да видимо шта се овде дешава. Функција узима као аргумент инстанцу модела „Схортенер“. Прво, функција генерише насумични код користећи цреате_рандом_цоде. Затим добија класу модела и проверава да ли постоји још неки објекат који има исти схорт_урл. Ако то уради, покреће се још једном, али ако је све у реду враћа рандом_цоде.

Касније ћете ступити у интеракцију са љуском, како бисте изблиза погледали ову функцију.

Након креирања услужне функције, хајде да је користимо за креирање насумичних кодова у моделу скраћивача.

Промена начина чувања

На крају класе „Схортенер“, изменићете метод чувања модела. Метода саве се позива сваки пут када се објекат сачува у бази података, па ћемо овде видети како да га користимо.

# 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)

Метода чувања се замењује, што значи да уводите нову функционалност већ постојећем родитељском методу. У основи говори Дјангу да сваки пут када се сачува објекат „Схортенер“, а схорт_урл није наведен, он мора бити попуњен насумичним кодом.

Покренуте миграције

Сада је време да направите и покренете миграције Схортенер модела. Да бисте то урадили, покрените следеће команде у основној фасцикли пројекта.

$ 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

За сада не морате да бринете шта су миграције. Само имајте на уму да приликом покретања ове две команде Дјанго креира а дб.склите база података датотеку, на основу модела које сте дефинисали.

Хајде да направимо неке објекте са Дјанго шкољком.

$ python manage.py shell

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

Тако ће отприлике функционисати сви објекти за скраћивање.

Вритинг виевс

Као што сам већ рекао, поглед је једноставна функција која узима захтев и враћа одговор. Па хајде да видимо како да створимо здрав поглед на свет.

Основни шаблон одговора

Унутар датотеке „урлсхортенер/виевс.пи“ направите функцију хоме_виев. аа

'''
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")

Враћа једноставну поруку „Здраво свете“. Касније ћете видети како то изгледа у претраживачу. Сада направите „урлс.пи“, тамо ће стајати сви УРЛ обрасци апликације.

тоуцх урлс.пи

Додајте следећи код.

'''
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")
]

Променљива аппнаме декларише (као што њено име сугерише) размак имена апликације урлсхортенер.

Брзо објашњавајући да увозимо функција путања, који враћа елемент који треба укључити у УРЛ обрасце апликације. Атрибут наме је именски простор путање, који се може позвати унутар шаблона ако је потребно.

Сада, хајде да изменимо укупне УРЛ адресе пројекта.

# 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

Ако покренете сервер, добићете једноставну поруку „Хелло ворлд“. То је зато што укључујете узорке УРЛ-а из апликације за скраћивање УРЛ-ова у целокупни пројекат.

Ово је само почетна тачка. Сада је време да направите образац који ће кориснику омогућити да сам креира скраћене УРЛ адресе.

Креирање форми

У Дјангу, а форму је једноставна класа која омогућава добијање уноса од корисника.

Направићете датотеку формс.пи. Конвенција је да се сви облици апликације чувају у тој датотеци.

cd urlshortener/
touch forms.py

Унутар те датотеке креираћете класу „СхортенерФорм“ која се протеже од „МоделФорм“.

'''
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',)

То је форма модела јер је његова сврха да креира објекат модела од корисничког уноса. Такође користимо аргумент виџета, који нам омогућава да наведемо атрибут „цласс“ (класа у ЦСС-у, не у питхон-у). То је зато што ћемо касније стилизовати апликацију помоћу боотстрапа.

Завршавање погледа

Након израде образаца време је да се креира коначна пословна логика апликације.

Идите до датотеке виевс.пи унутар апликације за скраћивање и измените приказ хоме_виев. Можете погледати Гитхуб репо у овом тренутку да бисте добили представу о томе како изгледа структура пројекта.

  Можете ли подићи новац са банкомата без картице Цхиме?

Постоје два приказа за апликацију за скраћивање УРЛ-ова:

  • Почетни приказ: Ово приказује образац за скраћивање и нови УРЛ ако је образац већ послат.
  • Поглед за преусмеравање: Ово преусмерава на дугачку УРЛ адресу и додаје 1 на време које следи.
  • Почнимо са кућним погледом који је најсложенији. Мораћете да увезете модел и образац Схортенер. Још увек користите функцију јер желим да разумете сав ток података у погледу. Такође, користићете путању за шаблон (који још није креиран).

    Хоме виев

    '''
    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)
    

    Поглед се заснива на два услова:

  • Када је ХТТП метода једнака ГЕТ: Ми прослеђујемо само као контекст, образац Схортенер који се користи за креирање Схортенер објеката.
  • Када је ХТТП метод једнак ПОСТ: И даље прослеђујемо образац у контексту јер желимо да корисник може да унесе другу УРЛ адресу. Али ми прослеђујемо захтев за објављивање у други образац који се зове усед_форм.
  • Зезнут начин за динамичко добијање комплетне УРЛ адресе је коришћење методе објекта захтева буилд_абсолуте_ури.

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

    Као безбедан начин обраде погрешног захтева (корисник није унео исправан УРЛ), добијамо грешке у обрасцу, прослеђујемо их као контекст и приказујемо шаблон као нормалан. Касније ћете видети како да примените приказ грешке у шаблону.

    Преусмери приказ

    Редирецт_урл_виев је мало једноставнији. То је детаљан приказ што значи да поглед ради само са објектом.

    Ова функција узима као параметре, захтев корисника и скраћени_део УРЛ-а. Није потребно тврдити који тип захтева добијамо, пошто не радимо са обрасцима у овом приказу.

    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 :(')

    Поглед штитимо наредбом три/екцепт, у случају да скраћени део није пронађен у бази података. Ако је објекат пронађен, он додаје 1 пољу тимес_фолловед и преусмерава помоћу функције ХттпРеспонсеРедирецт на УРЛ сајта који одговара случајном коду.

    Ажурирање УРЛ-ова

    Када направите два приказа апликације, време је да направите шаблоне крајњег УРЛ-а тако што ћете укључити путању до редирецт_урл_виев.

    Као и увек, почињете тако што ћете увозити приказе, а затим креирати функцију путање и прослеђивати као аргументе:

    • УРЛ рута
    • Поглед који указује на стазу
    • Име путање
    '''
    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"),
    ]
    

    Са овим подешавањем УРЛ-а, рутирање апликације изгледа овако.

    • лоцалхост:8000/: Поглед на почетну страницу
    • лоцалхост:8000/УРЛ-цоде: Преусмеравање на дугу УРЛ адресу

    Креирање шаблона

    Скоро сте стигли. Једина ствар која вас дели од израде ове апликације је кориснички интерфејс. За то користимо Дјанго шаблоне.

    Шаблони се користе за приказивање чистог интерфејса кориснику апликације. Ове датотеке се креирају унутар апликације у двострукој структури фолдера у облику: „шаблони/име апликације“

    # urlshortener directory
    mkdir -p templates/urlshortener/

    Напомена: Структура двоструке фасцикле и језик Дјанго шаблона су ван оквира овог упутства, али о њима можете прочитати у званична документација.

    Основни шаблон

    Дјанго дозвољава наслеђивање шаблона. То значи да можемо имати основни шаблон и проширити га са сврхом да следимо ДРИ (Не понављај се) принцип.

    cd templates/urlshortener
    touch 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>
    

    Користићемо ЦДН за покретање, да направимо брз и леп интерфејс без потребе за ЦСС или јавасцрипт фајловима.

    Ако желите да научите дубље о ДТЛ ознакама, можете то учинити са званични документи.

    Почетна шаблон

    Почетни шаблон, наслеђен из басе.хтмл датотеке. То значи да овај шаблон укључује сав ХТМЛ из надређене датотеке.

    {% 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 %}

    Брзо ћу објаснити ток података овог шаблона:

    • Приказује се образац Схортенер. Унутар црсф токен је подешен (Безбедносни разлози), а приказује се само дугачко УРЛ поље обрасца. Запамтите да ово поље има ЦСС класу, „форм-цонтрол форм-цонтрол-лг“, јер смо то поставили у обрасцу.
    • Ако се пронађу грешке, покажите их
    • Ако ПОСТ операција тада успе, приказује се нова УРЛ адреса.

    Коначна пријава

    Честитам! 🎉. Направили сте комплетну функционалну апликацију за скраћивање УРЛ-ова помоћу Дјанга.

    Ево неколико снимака екрана како апликација изгледа.

    Узми само:

    Грешка при скраћивању УРЛ адресе:

    Успешан скраћени УРЛ:

    УРЛ преусмерен:

    Шта мислите о излагању демонстрације ове апликације за скраћивање УРЛ-ова некоме? Проверите како да изложите Дјанго Демо апликацију на Интернет.

    Изазов 🔥

    Ако се осећате пријатно са својим Дјанго вештинама, зашто не вежбате са изазовом?.

    Клонирајте код ове апликације и направите систем аутентикације, где само регистровани корисници могу скратити своје УРЛ адресе.

    Када завршите, пошаљите захтев за повлачење и пингујте ме Твиттер да покажете своја достигнућа.

    Окончање

    Дошли сте до краја овог упутства. Веровали или не, управо сте прегледали све главне аспекте креирања Дјанго пројекта. Надам се да сте га сматрали изузетно корисним.

    У овом туторијалу ви:

    • Научио о току рада креирања Дјанго апликације.
    • Направио пројекат животописа
    • Разумео разлике и структуру Дјанго пројеката и Дјанго апликација.
    • Открио МВТ образац.
    • Креирани основни прикази функције
    • Користио је Дјанго ОРМ (Објецт Релатионал Маппер) за креирање једноставних модела

    То је све, има много тога да се покрије Дјанго веб оквирпа останите у контакту за још невероватних туторијала.