使用 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 框架涵盖了很多内容,因此请保持联系以获取更多精彩教程。
