Django ile URL Kısaltıcı Uygulama Oluşturma Kılavuzu
Yayınlanan: 2021-05-09Django'yu veya herhangi bir beceriyi öğrenmenin en iyi yolu, sahip olduğunuz bilgiyi işlevsel projeler oluşturarak uygulamaktır.
Django, en çok kullanılan Python web geliştirme çerçevesidir. Yerleşik özellikleri ve kapsamlı 3. taraf paketleri, onu tüm dünyada en sevilen web çerçevelerinden biri haline getirdi.
Hızlı, güvenilir ve birçok yerleşik özelliğe sahiptir. Örneğin, uygulamanızın ana özelliklerine odaklanmanızı sağlayan bir boşluk doğrulama sistemi. Ayrıca, kullanıcıları sosyal hesaplarıyla kaydetmenize olanak tanıyan Django-allauth gibi daha karmaşık görevleri gerçekleştirmek için harici paketler kurabilirsiniz.
Ama bazı gerçekleri ortaya çıkaralım. Django o kadar büyük bir çerçeve ki, bazen onunla başlamak zor.
Bugün, tamamen işlevsel bir Django uygulamasını sıfırdan oluşturacaksınız.
Bu eğitimin sonunda şunları yapacaksınız:
- Bir URL kısaltıcı uygulaması yazdınız
- Django MVT modelini anlayın
- Proje oluşturma iş akışını öğrendiniz
Ön Gereksinimler
Aşağıdaki gereksinimlerin tümü isteğe bağlıdır ve öğreticiyle birlikte takip etmenize yardımcı olacaktır. Ancak bunlardan herhangi biriyle deneyiminiz yoksa endişelenmeyin. En önemli adım ilk adımdır.
- UNIX komutlarının temel anlayışı (ls, cd, rm, touch)
- Python sınıflarının ve fonksiyonlarının temel anlayışı
- Bilgisayarınızda Python yüklü (Belki bariz ama dahil etmem gerekti)
- Django ile zaten bir şey inşa etmiş olsaydınız harika olurdu.
Tüm çalışma kodu bu Github deposunda mevcut olacak.
Artık önceki kavramları çok net bir şekilde anladığınıza göre, konuya girelim.
Proje bildirisi
Bu öğreticide, bir URL kısaltıcı oluşturacaksınız. Temel olarak, bir URL kısaltıcı, uzun bir URL alan ve onu kompakt bir URL'ye dönüştüren bir hizmettir.
Örneğin, bir tweet paylaşmak ve web sitenize bir bağlantı eklemek istiyorsanız, ancak karakter sınırlamasıyla karşı karşıyaysanız, bir URL kısaltıcı kullanabilirsiniz.
Bir grafikle görelim.

Gördüğünüz gibi, URL kısaltıcı uzun bir URL alır ve kısa bir URL döndürür. Bugün inşa edeceğiniz şey tam olarak bu.
Bu proje ile, MVT modelinin kullanımını uygulayacak, Django modelleriyle veritabanı tasarımının temellerini öğrenecek ve görünümler, URL'ler ve şablonlar aracılığıyla bilgileri kullanıcıya nasıl göstereceğinizi öğreneceksiniz.
Django projesinin yapısı
Temel olarak, bir Django web sitesi, tek bir proje ve birden çok ayrı uygulama üzerine kuruludur. Bu uygulamaların her birinin belirli işlevleri vardır ve kendi kendine çalışabilir.
Stackoverflow gibi karmaşık bir web uygulaması düşünelim. İşlevselliği iki ana unsura dayanmaktadır.
- Kullanıcı yönetimi: Oturum açma, Oturumu kapatma, İtibar, İzinler
- Forum: Sorular, cevaplar, etiketler, Filtreler
Bu nedenle, Django web sitesi yapısını takiben, proje iki ana uygulamaya sahip olan StackOverflow olarak adlandırılacaktır. Kullanıcıların uygulaması ve forum uygulaması.
Bu uygulamaların her biri kendi kendine yeten işlevselliğe sahiptir. Bu, her ikisinin de düzgün çalışması için gereken tüm kodu içerdiği anlamına gelir.
Buna modeller (veritabanı yapısı), görünümler (istekler ve yanıtlar), belirli URL kalıpları ve elbette şablonlar ve statik dosyalar (resimler, CSS, JavaScript) dahildir. Bu, kendi başlarına çalışabildikleri için herhangi bir Django uygulamasının yeniden kullanılabileceği anlamına gelir.
Kısaltma, bir proje, bir Web Uygulaması oluşturmaya yönelik bir dizi yapılandırma ve uygulamayı ifade eder. Öte yandan, bir Django uygulaması kendi kendine yeten (çalışması için gereken her şeye sahip) bir projenin parçasıdır ve amacı belirli bir işlemi gerçekleştirmektir.
Bir Django projesi kurun
Bu bölümde bir Django projesi kuracaksınız. Bu amaçla, Python bağımlılıklarını ve en önemli Django betiklerini düzenlemek için Sanal ortam gibi farklı araçlar kullanacaksınız. Django-admin ve Manage.py
Sanal çevre
Django ile uygulama oluştururken her zaman sanal ortamlarla çalışmanızı öneririm. Belirli bir bağımlılık kümesini korumanın en etkili yoludur. Ancak asıl amacı, geliştirme paketlerini küresel olanlardan izole etmektir.
O halde python'un yerleşik form komutu ile sanal bir ortam oluşturalım.
Not: Bu yöntemin çalışması için Python 3.6 veya daha yeni sürümleri gerekir.
python -m venv .venvBu komut python -m veya python –mod komutunu kullanır. Temel olarak, bir komut dosyası olarak bir modül veya kitaplık çalıştırır. Bu komutun anlamına göre venv , çalıştırdığımız kitaplıktır ve .venv , oluşturmak istediğimiz sanal ortamın adını ifade eder.
Yani sade dilde, bu komut şu anlama gelir.
Hey Python, yerleşik venv kitaplığını bir komut dosyası olarak çalıştırın ve bir sanalenv adı .venv oluşturun
Şimdi sıra şu komutla az önce oluşturduğumuz sanal ortamı aktifleştirmeye geldi.
source .venv/bin/activateYeni venv'de kurulu sıfır paketiniz olduğunu iddia etmek için çalıştırın.
pip freezeSanal ortamı doğru bir şekilde etkinleştirdiyseniz herhangi bir çıktı alamazsınız. Çünkü henüz hiçbir şey yüklemedik.
Django'ya girelim
URL kısaltıcı uygulamamızı oluşturmak için Django paketini kurarak başlayacağız. Django üçüncü taraf bir pakettir, bu nedenle onu Pip (Pip Kurulum Paketleri) ile kurmamız gerekiyor.
$ 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.1Not: $ öğesinin kabuk sembolünüzden başka bir şey olmadığını unutmayın.
Kurulumun doğru olup olmadığını kontrol etmek için venv'imizin kurulu paketlerini tekrar kontrol ediyoruz.
$ pip freeze asgiref==3.3.4 Django==3.2.1 pytz==2021.1 sqlparse==0.4.1Aldığınız sürümler benimkinden farklıysa endişelenmeyin. Django 3.x sürümünde duruyorsa sorunsuz devam edebilirsiniz.
Django projesi başlatmak
Django'yu kurduktan sonra sıra URL kısaltıcı web sitesinin yapısını oluşturmaya gelir. Django projesinin ne olduğunu hatırlıyor musunuz? Aşağıdaki komutu çalıştırarak bir tane oluşturalım.
django-admin startproject config Bu komutla ilgili her şeyi açıklayan django-admin , bir Django projesi oluşturmak için gereken tüm görevleri gerçekleştiren bir komut satırı yardımcı programıdır. “startproject” kısmı, Django-admin yardımcı programı tarafından çalıştırılan komuttur ve config , oluşturacağımız projenin adıdır.
Yapılandırmanın istediğiniz herhangi bir ad olabileceğini vurgulamak önemlidir. Bu projenin adı olarak config kullanmamın nedeni sadece kolaylık olması. Projeler arasında geçiş yapmak ve yine de aynı adlandırma kuralına sahip olmak güzel. Bu nedenle, istediğiniz zaman başka proje adlarını kullanmaktan korkmayın.
Fark edebileceğiniz gibi, artık bir config/ klasörünüz var ve içinde birçok dosya var. Daha sonra projenin dosya yapısını göreceğiz. Şimdilik proje dizinine girelim ve yerel sunucuyu çalıştıralım.
cd config/Kullanacağınız en önemli dosya Manage.py betiğidir. Django-admin ile aynı işlevselliğe sahiptir, ancak onu kullanmanın ana avantajı, projeyi çalıştırırken ayarları yönetmenize izin vermesidir.
Şimdi her şeyin düzgün çalışıp çalışmadığını görelim.
python manage.py runserver 
URL kısaltıcı uygulamasını oluşturma
Projenin ana uygulamasını oluşturma zamanı. Bu görevi gerçekleştirmek için Manage.py dosyasını kullanacaksınız.
python manage.py startapp urlshortenerBu, urlshortener adında bir Django uygulaması oluşturur. Ağaç komutunu çalıştırırsanız, bunun gibi bir şey elde edersiniz.
. ├── 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 Bu ana kadar oluşturulan farklı dosyaları açıklığa kavuşturalım. “config” projemizin adıdır ve sadece kongre için böyle adlandırılmıştır. Yapılandırmanın içinde settings.py alırsınız, projenizin tüm ayarlarını yaptığınız dosyadır. urls.py , URL'lerin proje içindeki genel yapılandırmasıdır. Proje içindeki tüm uygulamaların URL yollarını tanımlar.
asgi.py ve wsgi.py dosyaları hakkında çok fazla endişelenmeyin. Bunlar, uygulamanızı dağıtımda yapılandırmanıza izin veren dosyalardır.
manage.py , Django-admin'in mevcut tüm komutlarını çalıştırmanıza izin veren python betiğidir.
Yeni oluşturduğunuz uygulamanın adı olan urlshortener içine bir göz urlshortener , "migrations/" adlı garip bir klasör ve herhangi bir uygulamanın mantığı için çok önemli olan diğer bazı dosyalar olduğunu fark edebilirsiniz.
apps.py , uygulama yapılandırmasının bulunduğu yerdir. Genellikle, oldukça gelişmiş şeyler yapıyor olmanız dışında, onunla uğraşmazsınız.
admin.py , modellerinizi Django yönetici panelinde görünür kılmak için kaydettiğiniz yerdir.
models.py en önemlisidir. Bu modülün içinde, (belirsiz bir şekilde) verilerin saklanma şekli olan modelleri tanımlamanız gerekir. Daha sonra modeller hakkında daha fazla şey duyacaksınız.
migrations/ , Django geçişlerinin depolandığı klasördür. Daha sonra derinlemesine bakacağız.
tests.py , testlerin depolandığı dosyadır. Bu eğitimde testleri ele almayacağız.
views.py , görünümleri saklayan dosyadır. Temel olarak, kullanıcının uygulamanızın tüm yönleriyle nasıl etkileşime gireceğini tanımlar.
Django uygulaması yükleme
Devam etmeden önce settings.py dosyasını açın ve urlshortener uygulamasını ekleyerek INSTALLED_APPS değişkenini değiştirin.
# 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', ]Bu, bir uygulama oluşturduğunuzda rutin bir işlemdir. Bu yüzden her yaptığınızda proje ayarlarına kurmayı unutmayın.
MVT modelini anlama
Model, Görünüm, Şablon kalıbı, Django geliştiricilerinin web uygulamaları oluşturmak için kullandığı yazılım tasarım kalıbıdır.

3 ana kavram üzerine kuruludur. Model (veri), Görünüm (Veri ile kullanıcı etkileşimi), Şablon (Kullanıcıların verileri nasıl gördüğü).
Modeller, depolamak istediğiniz verilerin tüm alanlarını ve davranışını tanımlayan Python sınıflarıdır. Normalde her model, veritabanındaki benzersiz bir tabloya atıfta bulunur.
Görünümler, en basit ifadeleriyle, kullanıcıdan bir istek alan ve bir yanıt üreten çağrılabilirlerdir. Bu süreç arasında iş mantığı oluşur. “İş mantığının” oldukça belirsiz bir kavram olduğunu biliyorum, bu yüzden tam olarak ne olduğunu açıklamama izin verin. İş mantığı, verilerin oluşturulma, saklanma ve silinme şeklidir, hepsi bu.
Son olarak şablonlar, kullanıcılara gösterilen metin belgeleridir (Genellikle Html). Amacı, verileri olabildiğince temiz sunmaktır. Django, metin belgelerine python'un gücünün bir kısmını dahil etmenizi sağlayan Django şablon dili (DTL) adlı bir mini dil içerir.
Kısaltıcı modelini oluşturun
MVT modelini hızlıca kavradıktan sonra, sıfırdan Django URL kısaltıcı oluşturmaya başlayalım.
Öncelikle models.py dosyasının içindeki kısaltıcı modeli tanımlayalım.
''' 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}'Biliyorum. Oldukça büyük bir sınıf, bir sürü tuhaf şey oluyor ama umutsuzluğa kapılmayın. Her önemli şey üzerinde adım adım gideceğim.
Model açıklaması
Öncelikle models modülünü import ediyoruz. Bu modül, bir Django modeli oluşturmak için ihtiyaç duyduğumuz tüm işlevleri içerir.
“Kısaltıcı” modeline göz alarak, nota ilk şey uzanır olmasıdır models.Model . Aslında, herhangi bir Django uygulamasındaki herhangi bir model, models.Model sınıfının bir alt sınıfı olmalıdır.
Daha sonra modelin veritabanında sahip olacağı tüm alanları tanımlıyoruz. "Created" alanı, kısaltılmış bağlantının oluşturulduğu tarih ve saattir, bu nedenle bu tür bir işlevsellik oluşturmak için DateTimeField kullanıyoruz. Alanın yalnızca örnek oluşturulduğunda değiştirilmesini istediğimiz için auto_now_add=True bağımsız değişkenini kullanıyoruz.
times_followed ikinci alanı, kısaltılmış URL'nin kullanıldığı zamanları ifade eder. Bu bir PositiveIntegerField'dir ve varsayılan olarak sıfır olarak belirtiriz. Bu, bir örnek times_followed alanını her oluşturduğunda, Django'nun bu alanı 0 ile dolduracağı anlamına gelir.
Öte yandan, long_url , kullanıcının long_url URL'yi ifade eder. Bu bir URLField , çünkü kullanıcının yalnızca http://yoursite.com biçimindeki karakterleri girmesini istiyoruz.
Son alan ise short_url ve ilginç ayrıntılara sahip. Yalnızca 15 karakter uzunluğunda olabileceğini, benzersiz olması gerektiğini, yani o alanda tekrarlanan öğeler olamayacağını belirtiyoruz. Son olarak, boş bırakılabileceğini belirtiyoruz, bu da formlarla çalışırken kullanıcıların kendi kısaltma kodlarını yazmalarına gerek olmayacağı anlamına geliyor.
Meta iç sınıfı, bize sınıfın nasıl davranması gerektiğini söyler ve kısaltıcı nesnelerin sıralamasının ( Shortener.objects.all() çağırarak ) en son olanlar tarafından ayırt edileceğini belirledik.
__str__ yöntemi, modelin nasıl yazdırılması gerektiğini söyler. Yani long_url = “https://geekflare.com/” ve kısaltılmış kısmı “123456” olan bir nesnemiz varsa ve onu yazdırıyoruz.
https://geekflare.com/ to 123456Şimdi kısa bağlantıyı rastgele bir şekilde kaydetmenin bir yolunu aramanın zamanı geldi.
Kısaltma işlevi oluşturma
2 adet özel fonksiyon oluşturacağız. Birincisi rasgele bir kod üretecek, ikincisi ise Shortener modelinden tekrarlanan rasgele kodların alınmasını önleyecektir. Bunu yapmak için “urlshortener” uygulamasının içinde bir utils.py dosyası oluşturun.
touch utils.pyBu dosyanın içinde rastgele yerleşik modülden seçme işlevini kullanacağız. Bu, kodu oluşturmak için rastgele karakterler seçme görevini kolaylaştırır.
''' 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)] )Gördüğünüz gibi bu işlev, varsayılan olarak ayarlar dosyasında veya 7'de belirtilen uzunlukta rastgele bir dize döndürür. Ayarlar modülünden bir değişken almak için getattr işlevini kullanıyorsunuz, ancak değişken belirtilmemişse hata atmadan.
Biraz matematik yapalım. Her yer için 62'ye kadar kullanılabilir karakterin bulunabileceği 7 yerimiz varsa, olası permütasyonlar şunlardır:

Dolayısıyla bu hızlı hesaplamalara göre kısaltılan kısım 2,5 trilyon farklı koda kadar doldurulabilir. Böylece rastgele kısaltılmış URL'lerden çıkmayı unutabiliriz.
Bu kadar çok permütasyon olmasına rağmen, kısaltılmış parçaların tekrarlanması küçük bir olasılıktır. shortened_url alanını benzersiz olacak şekilde ayarladığımız için bu bir sorundur. Bu yüzden aşağıdaki fonksiyon çok kullanışlıdır.
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 Bakalım burada neler oluyor. İşlev, bir "Kısaltıcı" model örneğini bağımsız değişken olarak alır. İlk olarak, işlev create_random_code kullanarak rastgele bir kod oluşturur. Ardından model sınıfını alır ve aynı short_url sahip başka bir nesne olup olmadığını kontrol eder. Bunu yaparsa, kendini bir kez daha çalıştırır, ancak her şey yolundaysa random_code döndürür.

Daha sonra bu fonksiyona yakından bakmak için kabuk ile etkileşime gireceksiniz.
Fayda fonksiyonunu oluşturduktan sonra kısaltıcı modelde rastgele kodlar oluşturmak için kullanalım.
Kaydetme yöntemini değiştirme
“Shortener” dersinin sonunda model kaydetme yöntemini değiştireceksiniz. Bir nesne veritabanına her kaydedildiğinde kaydetme yöntemi çağrılır, bu yüzden burada nasıl kullanılacağını göreceğiz.
# 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) Kaydetme yönteminin üzerine yazılıyor, bu da önceden var olan bir üst yönteme yeni işlevler eklediğiniz anlamına geliyor. Temel olarak Django'ya bir “ short_url ” nesnesi her kaydedildiğinde ve short_url belirtilmediğinde, rastgele bir kodla doldurulması gerektiğini söylüyor.
Taşımaları çalıştırma
Şimdi Shortener modelinin geçişlerini yapma ve çalıştırma zamanı. Bunu yapmak için kök proje klasöründe aşağıdaki komutları çalıştırın.
$ 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Şimdilik, göçlerin ne olduğu konusunda endişelenmenize gerek yok. Bu iki komutu çalıştırırken, Django'nun tanımladığınız modeller temelinde bir db.sqlite veritabanı dosyası oluşturduğunu unutmayın.
Django kabuğu ile bazı nesneler oluşturalım.
$ 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 kdWFVIcHemen hemen tüm kısaltıcı nesneler böyle çalışır.
görüş yazma
Daha önce de söylediğim gibi, bir görünüm, bir istek alan ve bir yanıt döndüren basit bir işlevdir. Öyleyse merhaba dünya görüşünün nasıl oluşturulacağını görelim.
Temel şablon yanıtı
“urlshortener/views.py” dosyasının içinde home_view işlevini oluşturun . aa
''' 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")Basit bir "Merhaba dünya" mesajı döndürür. Daha sonra tarayıcıda nasıl göründüğünü göreceksiniz. Şimdi bir "urls.py" oluşturun, uygulamanın tüm URL kalıpları orada duracaktır.
touch urls.py
Aşağıdaki kodu ekleyin.
''' 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 değişkeni (adından da anlaşılacağı gibi) urlshortener uygulamasının ad alanını bildirir.
Uygulamanın url kalıplarına dahil edilecek bir öğeyi döndüren yol işlevini içe aktardığımızı hızlı bir şekilde açıklıyoruz. name niteliği, gerektiğinde şablonların içinde çağrılabilen yolun ad alanıdır.
Şimdi, genel proje URL'lerini değiştirelim.
# 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')) ]Şimdi sunucuyu tekrar çalıştıralım.
python manage.py runserverSunucuyu çalıştırırsanız, basit bir "Merhaba dünya" mesajı alırsınız. Bunun nedeni, URL kısaltıcı uygulamasındaki url kalıplarını genel projeye dahil ediyor olmanızdır.

Bu sadece bir başlangıç noktası. Şimdi, kullanıcının kendi Kısaltılmış URL'leri oluşturmasına izin verecek bir form oluşturma zamanı.
Form oluşturma
Django'da form, Kullanıcıdan girdi alınmasına izin veren basit bir sınıftır.
Bir form.py dosyası oluşturacaksınız. Uygulamanın tüm formlarını o dosyada saklamak bir kuraldır.
cd urlshortener/ touch forms.pyBu dosyanın içinde "ModelForm"dan uzanan bir "ShortenerForm" sınıfı oluşturacaksınız.
''' 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',)Amacı, kullanıcı girdisinden bir model nesnesi oluşturmak olduğu için bir model formudur. Ayrıca, "class" (python değil CSS'deki sınıf) özniteliğini belirlememize izin veren widget argümanını da kullanırız. Bunun nedeni, uygulamayı daha sonra bootstrap ile stilize edecek olmamızdır.
Görünümleri bitirmek
Formları oluşturduktan sonra, uygulamanın son iş mantığını oluşturmanın zamanı geldi.
views.py uygulamasının içindeki views.py dosyasına gidin ve home_view görünümünü değiştirin. Proje yapısının nasıl göründüğü hakkında bir fikir edinmek için şu anda Github deposuna göz atabilirsiniz.
URL kısaltıcı uygulaması için iki görünüm vardır:
- Ana sayfa görünümü: Bu, kısaltılmış formu ve form zaten gönderildiyse yeni URL'yi gösterir.
- Yönlendirme görünümü: Bu, uzun URL'ye yönlendirir ve takip edilen sürelere 1 ekler.
En karmaşık olan ev görünümü ile başlayalım. Shortener modelini ve formunu içe aktarmanız gerekecek. Görünümün tüm veri akışını anlamanızı istediğim için hala bir işlev kullanıyorsunuz. Ayrıca, bir şablon için yolu kullanacaksınız (Henüz oluşturulmamış).
Ana sayfa görünümü
''' 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)Görünüm iki koşula dayanır:
- HTTP yöntemi GET'e eşit olduğunda: Shortener nesneleri oluşturmak için kullanılan Shortener formu yalnızca bağlam olarak geçiyoruz.
- HTTP yöntemi POST'a eşit olduğunda: Kullanıcının başka bir URL girebilmesini istediğimizden, formu bağlamda iletmeye devam ediyoruz. Ancak, Post isteğini kullanılmış_form adlı başka bir forma geçiriyoruz.
Tam site URL'sini dinamik olarak almanın zor bir yolu, istek nesnesi yöntemini build_absolute_uri .
>>> print(request.build_absolute_uri('/')) 'https://localhost:8080/'Yanlış bir isteği işlemenin güvenli bir yolu olarak (Kullanıcı geçerli bir URL girmedi), form hatalarını alır, bunları bağlam olarak iletir ve şablonu normal hale getiririz. Daha sonra şablonda hata görüntüsünün nasıl uygulanacağını göreceksiniz.
Yönlendirme görünümü
redirect_url_view biraz daha basittir. Bu, görünümün yalnızca bir nesneyle çalıştığı anlamına gelen ayrıntılı bir görünümdür.
Bu işlev, parametre olarak kullanıcının isteğini ve URL'nin kısaltılmış_bölümünü alır . Bu görüşte formlarla çalışmadığımız için, aldığımız istek türünü belirtmemize gerek yok.
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 :(') Kısaltılmış kısmın veritabanında bulunmaması durumunda, görünümü bir try/except deyimi ile koruyoruz. Nesne bulunursa, times_followed alanına 1 ekler ve HttpResponseRedirect işleviyle rastgele koda karşılık gelen site URL'sine yönlendirir.
URL'leri güncelleme
Uygulamanın iki görünümünü oluşturduktan sonra, şimdi redirect_url_view yolunu ekleyerek nihai URL kalıplarını oluşturma zamanı.
Her zaman olduğu gibi, görünümleri içe aktararak ve ardından bir yol işlevi oluşturarak ve argüman olarak ileterek başlarsınız:
- URL yolu
- Yolu gösteren görünüm
- yolun adı
''' 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'), ]Bu URL kurulumu ile uygulamanın yönlendirmesi şöyle görünür.
-
localhost:8000/: Ana sayfa görünümü -
localhost:8000/URL-code: Uzun URL'ye yönlendirme
Şablon oluşturma
Neredeyse oradasın. Sizi bu uygulamayı yapmaktan ayıran tek şey kullanıcı arayüzüdür. Bunun için Django şablonlarını kullanıyoruz.
Şablonlar, uygulama kullanıcısına temiz bir arayüz oluşturmak için kullanılır. Bu dosyalar, uygulamanın içinde şu formun çift klasör yapısında oluşturulur: "şablonlar/uygulama adı"
# urlshortener directory mkdir -p templates/urlshortener/Not: Çift klasör yapısı ve Django Şablon dili bu eğitimin kapsamı dışındadır ancak bunlar hakkında resmi belgelerde okuyabilirsiniz.
Temel şablon
Django, şablon mirasına izin verir. Bu, DRY (Kendini tekrar etme) ilkesini takip etmek amacıyla bir temel şablona sahip olabileceğimiz ve onu genişletebileceğimiz anlamına gelir.
cd templates/urlshortener touch base.htmlbase.html dosyası bir kuraldır ve uygulamadaki diğer tüm şablonların bunun bir uzantısı olması gerektiği anlamına gelir.
<!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>CSS veya javascript dosyalarına ihtiyaç duymadan hızlı ve güzel bir arayüz oluşturmak için önyükleme CDN'sini kullanacağız.
DTL etiketleri hakkında derinlemesine bilgi edinmek istiyorsanız, bunu resmi belgelerle yapabilirsiniz.
Ana sayfa şablonu
Base.html dosyasından alınan ana sayfa şablonu. Bu, bu şablonun ana dosyadaki tüm HTML'yi içerdiği anlamına gelir.
{% 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 %}Bu şablonun veri akışını hızlıca açıklayacağım:
- Kısaltıcı formu görüntülenir. İçeride crsf belirteci ayarlanır (Güvenlik nedenleriyle) ve yalnızca formun uzun URL alanı gösterilir. Bu alanın "form-control form-control-lg" CSS sınıfına sahip olduğunu unutmayın, çünkü bunu formda ayarladık.
- Herhangi bir hata bulunursa, bunları gösterin
- POST işlemi başarılı olursa, yeni URL gösterilir.
Son başvuru
Tebrikler! . Django ile eksiksiz bir işlevsel URL kısaltıcı uygulaması oluşturdunuz.
İşte uygulamanın nasıl göründüğüne dair bazı ekran görüntüleri.
Yalnızca şunları alın:

URL kısaltılırken hata oluştu:

Başarılı kısaltılmış URL:

URL yönlendirildi:

Bu URL kısaltıcı uygulamasının bir demosunu birine göstermek hakkında ne düşünüyorsunuz? Bir Django Demo uygulamasının internete nasıl sunulacağını kontrol edin.
Meydan okumak
Django becerileriniz konusunda kendinizi rahat hissediyorsanız, neden bir meydan okuma ile pratik yapmıyorsunuz?
Bu uygulamanın kodunu klonlayın ve yalnızca kayıtlı kullanıcıların URL'lerini kısaltabileceği bir kimlik doğrulama sistemi oluşturun.
İşiniz bittiğinde, bir çekme isteği gönderin ve başarılarınızı sergilemek için bana Twitter'da ping atın.
toparlamak
Bu eğitimin sonuna geldiniz. İster inanın ister inanmayın, bir Django projesi oluşturmanın tüm ana yönlerini az önce gözden geçirdiniz. Umarım son derece faydalı bulmuşsunuzdur.
Bu eğitimde:
- Bir Django uygulaması oluşturmanın iş akışı hakkında bilgi edinildi.
- Özgeçmiş projesi oluşturdu
- Django projelerinin ve Django uygulamalarının farklılıklarını ve yapısını anladı.
- MVT modelini keşfetti.
- Oluşturulan İşlev temel görünümleri
- Basit modeller oluşturmak için Django ORM'yi (Nesne İlişkisel Eşleştiricisi) kullandı
Hepsi bu kadar, Django web çerçevesi ile kapsanacak çok şey var, bu yüzden daha harika öğreticiler için iletişim halinde kalın.
