使用 Django 構建 URL Shortener 應用程序的指南
已發表: 2021-05-09學習 Django 或任何技能的最佳方法是通過創建功能性項目來應用您所擁有的知識。
Django 是最常用的 Python Web 開發框架。 它的內置功能和大量的 3rd 方軟件包使其成為全球最受歡迎的 Web 框架之一。
它快速、可靠,並具有許多內置功能。 例如,漏洞身份驗證系統可讓您專注於應用程序的主要功能。 此外,您可以安裝外部包來完成更複雜的任務,例如Django-allauth ,它允許您使用他們的社交帳戶註冊用戶。
但讓我們揭露一些事實。 Django 是一個如此龐大的框架,有時很難開始使用它。
所以今天您將從頭開始構建一個功能齊全的 Django 應用程序。
在本教程結束時,您將:
- 已經編寫了一個 URL 縮短器應用程序
- 理解 Django MVT 模式
- 學習了創建項目的工作流程
先決條件
以下所有要求都是可選的,將幫助您按照教程進行操作。 但是,如果您沒有任何這些方面的經驗,請不要擔心。 最重要的一步是第一步。
- 對 UNIX 命令的基本理解(ls、cd、rm、touch)
- 對 Python 類和函數的基本理解
- Python 安裝在您的計算機上(也許很明顯,但我必須包含它)
- 如果你已經用 Django 構建了一些東西,那就太好了
所有工作代碼都將在此 Github 存儲庫中可用。
現在您已經清楚地了解了之前的概念,讓我們進入正題。
項目說明
在本教程中,您將構建一個 URL 縮短器。 基本上,URL 縮短器是一種將長 URL 轉換為緊湊 URL 的服務。
例如,如果您想分享一條推文並希望包含指向您網站的鏈接,但您面臨字符數限制,則可以使用 URL 縮短器。
讓我們用圖形來看看它。

如您所見,URL 縮短器獲取一個長 URL 並返回一個短 URL。 這正是您今天要構建的內容。
通過這個項目,您將練習 MVT 模式的使用,學習使用 Django 模型進行數據庫設計的基礎知識,並學習如何通過視圖、URL 和模板向用戶顯示信息。
Django 項目的結構
基本上,Django 網站建立在單個項目和多個獨立的應用程序之上。 這些應用程序中的每一個都具有特定的功能,並且能夠自行運行。
讓我們想像一個像 Stackoverflow 這樣的複雜 Web 應用程序。 它的功能基於兩個主要方面。
- 用戶管理:登錄、註銷、信譽、權限
- 論壇:問題、答案、標籤、過濾器
因此,按照 Django 網站結構,該項目將被命名為StackOverflow ,它有兩個主要應用程序。 用戶的應用程序和論壇應用程序。
這些應用程序中的每一個都具有獨立的功能。 這意味著兩者都包含它們正常工作所需的所有代碼。
這包括模型(數據庫結構)、視圖(請求和響應)、特定的 URL 模式,當然還有模板和靜態文件(圖像、CSS、JavaScript)。 這意味著任何 Django 應用程序都可以重用,因為它們可以自己工作。
簡而言之,項目是指用於構建 Web 應用程序的一組配置和應用程序。 另一方面,Django 應用程序是項目的一部分,它是獨立的(擁有工作所需的一切),其目的是執行特定操作。
設置 Django 項目
在本節中,您將設置一個 Django 項目。 為此,您將使用不同的工具(如虛擬環境)來組織 Python 依賴項和最重要的 Django 腳本。 Django-admin和manage.py
虛擬環境
我總是建議在使用 Django 構建應用程序時使用虛擬環境。 這是維護一組特定依賴項的最有效方法。 但它的主要目的是將開發包與全局包隔離開來。
因此,讓我們使用 python 內置的表單命令創建一個虛擬環境。
注意:此方法需要 Python 3.6 或更新版本才能工作。
python -m venv .venv此命令使用python -m或python –mod命令。 從根本上說,它以腳本的形式運行一個模塊或庫。 按照這個命令的意思, venv是我們運行的庫, .venv指的是我們要創建的虛擬環境的名字。
所以用通俗的語言來說,這個命令的意思是。
嘿 Python,作為腳本運行內置庫venv並創建一個 virtualenv 名稱.venv
現在,是時候使用以下命令激活我們剛剛創建的虛擬環境了。
source .venv/bin/activate要斷言您在新的 venv 中安裝了零個軟件包,請運行。
pip freeze如果您正確激活了虛擬環境,您將不會得到任何輸出。 那是因為我們還沒有安裝任何東西。
讓我們進入Django
為了創建我們的 URL 縮短器應用程序,我們將從安裝 Django 包開始。 Django是第三方包,所以我們需要用Pip (Pip Installs Packages)來安裝它。
$ pip install django Collecting django Downloading Django-3.2.1-py3-none-any.whl (7.9 MB) |████████████████████████████████| 7.9 MB 344 kB/s Collecting asgiref<4,>=3.3.2 Using cached asgiref-3.3.4-py3-none-any.whl (22 kB) Collecting sqlparse>=0.2.2 Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB) Collecting pytz Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB) Installing collected packages: asgiref, sqlparse, pytz, django Successfully installed asgiref-3.3.4 django-3.2.1 pytz-2021.1 sqlparse-0.4.1注意:請記住, $只不過是您的外殼符號。
為了檢查安裝是否正確,我們再次檢查我們的 venv 的已安裝包。
$ pip freeze asgiref==3.3.4 Django==3.2.1 pytz==2021.1 sqlparse==0.4.1如果您獲得的版本與我的不同,請不要擔心。 如果 Django 仍然使用 3.x 版,您可以繼續沒有任何問題。
啟動 Django 項目
安裝 Django 後,就可以創建 URL 縮短器網站的結構了。 你還記得什麼是 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這將創建一個名為urlshortener的 Django 應用程序。 如果你運行 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 ,你可能會注意到有一個奇怪的文件夾叫做“migrations/”和一些其他對任何應用程序的邏輯都至關重要的文件。
apps.py是應用程序配置所在的位置。 通常,您不會亂搞它,除非您正在做一些非常高級的事情。
admin.py是您註冊模型以使它們在 Django 管理面板中可見的地方。
models.py是最重要的一個。 在這個模塊中,您必須定義模型,這些模型(模糊地說)是數據的存儲方式。 稍後您會聽到更多關於模型的信息。
migrations/是存儲 Django 遷移的文件夾。 我們稍後會深入研究。
tests.py是存儲測試的文件。 我們不會在本教程中介紹測試。
views.py是存儲視圖的文件。 基本上,它定義了用戶將如何與您的應用程序的所有方面進行交互。
安裝 Django 應用
在繼續之前,打開settings.py文件並通過添加 urlshortener 應用程序修改INSTALLED_APPS變量。
# 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 開發人員用來創建 Web 應用程序的軟件設計模式。

它基於 3 個主要概念。 模型(數據)、視圖(用戶與數據的交互)、模板(用戶如何查看數據)。
模型是 Python 類,它定義了您願意存儲的數據的所有字段和行為。 通常每個模型都引用數據庫中的唯一表
視圖最簡單的表達方式是從用戶那裡獲取請求並生成響應的可調用對象。 在該過程之間發生業務邏輯。 我知道“業務邏輯”是一個非常晦澀的概念,所以讓我來解釋一下它到底是什麼。 業務邏輯是創建、存儲和刪除數據的方式,僅此而已。
最後,模板是顯示給用戶的文本文檔(通常是 Html)。 其目的是盡可能乾淨地呈現數據。 Django 結合了一種稱為 Django 模板語言 (DTL) 的迷你語言,它可以讓您在文本文檔中結合 Python 的一些強大功能。
創建 Shortener 模型
一旦您快速掌握了 MVT 模式,讓我們從頭開始創建 Django URL 縮短器。
首先,讓我們在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 類的子類。
然後我們定義模型將在數據庫中擁有的所有字段。 “已創建”字段是創建縮短鏈接的日期和時間,因此我們使用DateTimeField來創建此類功能。 我們使用參數auto_now_add=True因為我們希望該字段僅在創建實例時更改。
第二個字段times_followed指的是縮短的 URL 已被使用的次數。 它是一個PositiveIntegerField ,我們指定默認值為零。 這意味著每次實例創建了times_followed字段時,Django 都會用 0 填充該字段。
另一方面, long_url指的是用戶輸入的 URL。 它是一個URLField ,因為我們只希望用戶輸入以下形式的字符: http://yoursite.com 。
最後一個字段是short_url ,它有一些有趣的細節。 我們指定它只能是 15 個字符長,它必須是唯一的,這意味著該字段中不能有重複的元素。 最後,我們指出它可以留空,這意味著在使用表單時用戶不需要編寫自己的縮短代碼。
Meta 內部類,告訴我們該類必須如何表現,並且我們將縮短器對象的排序(調用Shortener.objects.all() )設置為由最近的對象來區分。
__str__方法告訴模型必須如何打印。 因此,如果我們有一個帶有 long_url = “https://geekflare.com/” 和縮短部分“123456”的對象,我們將其打印出來。
https://geekflare.com/ to 123456現在是時候尋找一種以隨機方式保存短鏈接的方法了。
創建縮短功能
我們將創建 2 個自定義函數。 第一個將生成一個隨機代碼,第二個將防止從 Shortener 模型中獲得重複的隨機代碼。 為此,請在“urlshortener”應用程序中創建一個文件 utils.py。
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。
稍後您將與 shell 進行交互,以便仔細查看此函數。
創建效用函數後,讓我們使用它在縮短器模型中創建隨機代碼。
修改保存方法
在“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) save 方法正在被覆蓋,這意味著您正在向預先存在的父方法引入新功能。 它基本上是在告訴 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 shell 創建一些對象。
$ 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這幾乎就是所有縮短器對象的工作方式。
編寫視圖
正如我之前所說,視圖是一個簡單的函數,它接受一個請求並返回一個響應。 那麼讓我們看看如何創建一個 hello world 視圖。
基本模板響應
在“urlshortener/views.py”文件中創建一個函數home_view 。 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")它返回一條簡單的消息“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 應用程序的命名空間。
快速解釋一下我們正在導入 path 函數,它返回一個元素以包含在應用程序的 urlpatterns 中。 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 縮短器應用程序中的 urlpatterns 包含到整個項目中。

這只是一個起點。 現在是時候創建一個表單,讓用戶自己創建縮短的 URL。
創建表單
在 Django 中,表單是一個允許從用戶獲取輸入的簡單類。
您將創建一個 forms.py 文件。 將應用程序的所有表單存儲在該文件中是一種約定。
cd urlshortener/ touch forms.py在該文件中,您將創建一個從“ModelForm”擴展而來的“ShortenerForm”類。
''' 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',)它是一個模型表單,因為它的目的是從用戶輸入創建一個模型對象。 我們還使用了小部件參數,它允許我們指定“類”(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 的表單。
動態獲取完整站點 URL 的一種棘手方法是使用請求對象方法build_absolute_uri 。
>>> print(request.build_absolute_uri('/')) 'https://localhost:8080/'作為處理錯誤請求(用戶沒有輸入有效 URL)的一種安全方式,我們獲取表單錯誤,將它們作為上下文傳遞並正常呈現模板。 稍後您將看到如何在模板中實現錯誤顯示。
重定向視圖
redirect_url_view稍微簡單一點。 這是一個詳細視圖,這意味著該視圖僅適用於一個對象。
該函數將用戶的請求和 URL 的shortened_part作為參數。 沒有必要斷言我們得到的請求類型,因為我們沒有在這個視圖中使用表單。
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。
更新網址
創建應用程序的兩個視圖後,就可以通過包含redirect_url_view的路徑來創建最終 URL 模式。
與往常一樣,您首先導入視圖,然後創建路徑函數並作為參數傳遞:
- URL路由
- 指向路徑的視圖
- 路徑名稱
''' Urls for shortener app urlshortener/urls.py ''' from django.urls import path # Import the home view from .views import home_view, redirect_url_view appname = "shortener" urlpatterns = [ # Home view path('', home_view, name='home'), path('<str:shortened_part>', redirect_url_view, name='redirect'), ]使用此 URL 設置,應用程序的路由如下所示。
-
localhost:8000/:主頁視圖 localhost:8000/URL-code:重定向到長 URL
創建模板
你快到了。 唯一使您與構建此應用程序不同的是用戶界面。 為此,我們使用 Django 模板。
模板用於向應用程序用戶呈現乾淨的界面。 這些文件在應用程序內部創建,採用以下形式的雙文件夾結構:“templates/appname”
# urlshortener directory mkdir -p templates/urlshortener/注意:雙文件夾結構和 Django 模板語言超出了本教程的範圍,但您可以在官方文檔中閱讀它們。
基本模板
Django 允許模板繼承。 這意味著我們可以擁有一個基本模板並擴展它,目的是遵循 DRY(不要重複自己)原則。
cd templates/urlshortener touch base.htmlbase.html 文件是一種約定,意味著應用程序上的所有其他模板都必須是該模板的擴展。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Django Url shortener</title> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous" /> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" integrity="sha512-iBBXm8fW90+nuLcSKlbmrPcLa0OT92xO1BIsZ+ywDWZCvqsWgccV3gFoRBv0z+8dLJgyAHIhR35VZc2oM/gI1w==" crossorigin="anonymous" /> </head> <body> {% block body %} {% endblock body %} <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-p34f1UUtsS3wqzfto5wAAmdvj+osOnFyQFpp4Ua3gs/ZVWx6oOypYoCJhGGScy+8" crossorigin="anonymous" ></script> </body> </html>我們將使用引導 CDN,在不需要 CSS 或 javascript 文件的情況下製作一個快速而漂亮的界面。
如果你想深入了解 DTL 標籤,可以參考官方文檔。
主頁模板
主頁模板,繼承自 base.html 文件。 這意味著該模板包含父文件中的所有 HTML。
{% extends 'urlshortener/base.html' %} {% block body %} <div class="container"> <div class="card mt-5"> <div class="card-header text-center py-3"> <h1>URL Shortner Application <i class="fas fa-link px-2"></i></h1> </div> <div class="px-3 py-4"> <form action="" method="POST"> {% csrf_token %} <div class="row g-1"> <div class="col-10">{{form.long_url}}</div> <div class="col-2"> <button class="btn btn-success btn-lg w-100" type="submit"> Shorten </button> </div> </div> </form> </div> </div> {% if errors %} <div class="alert alert-danger mt-4" role="alert"> <p>{{errors}}</p> </div> {% endif %} {% if new_url %} <div class="mx-auto text-center mt-5"> <h2 class="text-danger">Your shortened Url</h2> <p>You can copy the Link below and share it with your friends</p> <p class="">{{new_url}}</p> <p><span class="text-danger">Previous URL:</span> {{long_url}}</p> </div> {% endif %} </div> {% endblock body %}我快速解釋一下這個模板的數據流:
- 顯示 Shortener 表單。 在裡面,設置了 crsf 令牌(安全原因),並且只顯示表單的長 URL 字段。 請記住,該字段具有 CSS 類“form-control form-control-lg”,因為我們在表單中設置了它。
- 如果發現任何錯誤,則顯示它們
- 如果 POST 操作成功,則會顯示新的 URL。
最終申請
恭喜! . 您已經使用 Django 構建了一個功能完整的 URL 縮短器應用程序。
以下是該應用程序外觀的一些屏幕截圖。
僅獲取:

縮短網址時出錯:

成功的縮短網址:

重定向的網址:

您如何看待將此 URL 縮短器應用程序的演示公開給某人? 檢查如何將 Django 演示應用程序公開到互聯網。
挑戰
如果您對自己的 Django 技能感到滿意,為什麼不挑戰一下呢?
克隆這個應用程序的代碼並創建一個認證系統,只有註冊用戶才能縮短他們的 URL。
完成後,發送拉取請求並在 Twitter 上 ping 我以展示您的成就。
包起來
您已完成本教程。 信不信由你,您剛剛回顧了創建 Django 項目的所有主要方面。 我希望你發現它非常有用。
在本教程中,您:
- 了解了創建 Django 應用程序的工作流程。
- 建立了一個簡歷項目
- 了解 Django 項目和 Django 應用程序的差異和結構。
- 發現了 MVT 模式。
- 創建的函數基礎視圖
- 使用 Django ORM (Object Relational Mapper) 創建簡單模型
就是這樣,Django Web 框架涵蓋了很多內容,因此請保持聯繫以獲取更多精彩教程。
