使用 Django 构建 URL 短链接应用程序指南 - 轻松赚取7000多美刀

今天在代码交易网站看到一个短链接应用程序,定价24美刀,已经销售300多份。

提供的功能包括:缩短链接、垃圾流量检测、流量统计、管理界面等。今天我们就来学习如何制作一个短链接应用程序。

学习 Django 或任何技能的最佳方法是通过创建功能性项目来应用您所拥有的知识。

Django 是最常用的 Python Web 开发框架。它的内置功能和大量的第三方包使其成为全世界最受欢迎的Web 框架之一。

它快速、可靠,并具有许多内置功能。例如,漏洞认证系统,让您专注于应用程序的主要功能。此外,您可以安装外部包来完成更复杂的任务,例如Django-allauth,它允许您使用他们的社交帐户注册用户。

我们知道,Django是一个功能非常丰富的框架,有时很难开始使用它。所以今天您将从头开始构建一个功能齐全的 Django 应用程序。

在本教程结束时,您将学会以下内容:

  • 编写了一个 URL 缩短器应用程序

  • 了解 Django MVT 模式

  • 了解创建Django项目的工作流程

您需要具备以下技能

以下所有要求都是可选的,将帮助您按照教程进行操作。但是,如果您没有任何这些方面的经验,请不要担心,我们将为您详细讲解所有操作。

  • 基本了解UNIX 命令(ls、cd、rm、touch)

  • 对 Python 类和函数的基本理解

  • Python 安装在您的计算机上(可能很明显,但我必须包含它)

  • 如果您已经使用 Django 构建了一些东西,那就太好了

现在您已经清楚地了解了前面的概念,让我们进入正题。

项目介绍

在本教程中,您将构建一个 URL 短链接应用。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-adminmanage.py

虚拟环境

在使用 Django 构建应用程序时,我强烈建议使用虚拟环境。这是维护一组特定依赖项的最有效方法。但它的主要目的是将开发包与全局包隔离开来。

因此,让我们使用 python 内置的表单命令创建一个虚拟环境。

注意:此方法需要Python 3.6 或更新版本才能运行。

python -m venv .venv

此命令使用 python -mpython –mod 命令。从根本上说,它以脚本的形式运行模块或库。根据这条命令的意思,venv 就是我们正在运行的库,.venv就是我们要创建的虚拟环境的名称。

现在是时候使用以下命令激活我们刚刚创建的虚拟环境了。

source .venv/bin/activate

要确定您的 venv 环境中没有安装任何包,请运行。

pip freeze

如果您正确激活了虚拟环境,您将不会得到任何输出。那是因为我们还没有安装任何东西。

让我们进入Django

为了创建我们的 URL 短链接应用程序,我们将从安装 Django 包开始。Django是第三方包,所以我们需要用 Pip安装(Pip Installs Packages)。

$ pip install django
Collecting django
  Downloading Django-3.2.1-py3-none-any.whl (7.9 MB)|████████████████████████████████| 7.9 MB 344 kB/s 
Collecting asgiref<4,>=3.3.2
  Using cached asgiref-3.3.4-py3-none-any.whl (22 kB)
Collecting sqlparse>=0.2.2
  Using cached sqlparse-0.4.1-py3-none-any.whl (42 kB)
Collecting pytz
  Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)
Installing collected packages: asgiref, sqlparse, pytz, django
Successfully installed asgiref-3.3.4 django-3.2.1 pytz-2021.1 sqlparse-0.4.1

注意:请记住$只是您的 shell 符号。

为了检查安装是否正确,我们再次检查 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

创建短链接应用

是时候创建项目的主应用程序了。您将使用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 是项目中 URLs 的整体配置。它定义了项目内所有应用程序的 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文件并INSTALLED_APPS 通过添加 urlshortener 应用程序修改变量。

# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Custom apps
    'urlshortener',
]

这是创建应用程序时的常规过程。所以每次你这样做的时候,不要忘记在项目设置中安装它。

了解 MVT 模式

模型、视图、模板模式是 Django 开发人员用来创建 Web 应用程序的软件设计模式。

它基于 3 个主要概念。模型(数据)、视图(用户与数据的交互)、模板(用户如何查看数据)。

模型是 Python 类,它定义了您愿意存储的数据的所有字段和行为。通常每个模型都引用数据库中的唯一表

最简单的视图是可调用的,它接受用户的请求并生成响应。在该流程之间发生业务逻辑。我知道“业务逻辑”是一个相当晦涩的概念,所以让我来解释一下它到底是什么。业务逻辑就是创建、存储和删除数据的方式,仅此而已。

最后,模板是显示给用户的文本文档(通常是 Html)。其目的是尽可能清晰地呈现数据。Django 结合了一种称为Django 模板语言 (DTL)的迷你语言,它可以让您在文本文档中结合 Python 的一些强大功能。

创建 Shortener 模型

快速掌握 MVT 模式后,让我们从头开始创建 Django URL 缩短器。

首先,让我们在文件中定义缩短器模型models.py 。

'''
Url 短链接模型
'''

from django.db import models

# Create your models here.

class Shortener(models.Model):
    '''
    缩短长链接
    
    created -> Shortener模型创建时间 
    
    times_followed -> 短链接点击次数

    long_url -> 原链接

    short_url -> 短链接 https://domain/(short_url)
    ''' 
    created = models.DateTimeField(auto_now_add=True)

    times_followed = models.PositiveIntegerField(default=0)    

    long_url = models.URLField()

    short_url = models.CharField(max_length=15, unique=True, blank=True)

    class Meta:

        ordering = ["-created"]


    def __str__(self):

        return f'{self.long_url} to {self.short_url}'

我知道。这是一个相当大的类,但不要绝望。我会一步一步地讲解这个类。

模型解释

首先,我们导入models模块。该模块包含创建 Django 模型所需的所有功能。

“Shortener”模型,首先要注意的是它扩展了models.Model。事实上,任何 Django 应用程序中的任何模型都必须是models.Model类的子类。

然后我们定义模型将在数据库中拥有的所有字段。“created”字段是创建缩短链接的日期和时间,因此我们使用DateTimeField来创建此类功能。我们使用参数 auto_now_add=True是因为我们希望该字段仅在创建实例时被更改。

第二个字段times_followed 是指缩短的 URL 被使用的次数。它是一个 PositiveIntegerField,我们指定默认值为零。这意味着每次实例创建该times_followed字段时,Django 都会用 0 填充该字段。

另一方面,long_url 指的是用户输入的 URL。它是一个 URLField,因为我们只希望用户输入以下形式的字符:http://yoursite.com。

最后一个字段是short_url。我们指定它的长度只能是15个字符,它必须是唯一的,也就是说该字段中不能有重复的元素。最后,我们指出它可以留空,这意味着在使用表单时用户不需要编写自己的缩短代码。

Meta 内部类,告诉我们类必须如何表现,这里我们设置调用Shortener.objects.all()Shortener对象按照创建日期由最近的日期到最远的日期排序。

该__str__方法说明如何输出模型信息。因此,如果我们有一个包含 long_url = “https://blog.csdn.net/jkol12” 和短链接 “123456” 的对象,我们将输出出来结果如下。

https://blog.csdn.net/jkol12 to 123456

现在是时候寻找一种以随机方式保存短链接的方法了。

创建缩短链接功能

我们将创建 2 个自定义函数。第一个将生成一个随机代码,第二个将防止从 Shortener 模型中获取重复的随机代码。为此,在“urlshortener”应用程序中创建一个文件 utils.py。

touch utils.py

在这个文件中,我们将使用 random 内置模块中的 choose 函数。这有助于选择随机字符来创建代码的任务。

'''
助手函数
'''
from django.conf import settings

from random import choice

from string import ascii_letters, digits

# 尝试从settings模块读取设置,默认值是7
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。如果返回True,它会再运行一次,但如果不存在这样的短链接,它会返回 random_code。

稍后您将与 shell 交互,以便仔细查看此功能。

创建效用函数后,让我们用它在缩短模型中创建随机代码。

修改保存方法

在“Shortener”类的末尾,您将修改模型保存方法。每次将对象保存到数据库时都会调用 save 方法,因此我们将在此处了解如何使用它

# 引入创建随机短链接代码函数
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

这就是创建Shortener对象的方法。

写视图

正如我之前所说,视图是一个接受请求并返回响应的简单函数。那么让我们看看如何创建一个 hello world 视图。

基本模板响应

在“urlshortener/views.py”文件中创建一个函数 home_view

'''
短链接视图
'''
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

添加以下代码。

'''
shortener 应用 Url 路由 urlshortener/urls.py
'''

from django.urls import path

# 引入 home 视图
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 Url 路由
    path('', include('urlshortener.urls'))
]

现在让我们再次运行服务器。

python manage.py runserver

如果您运行服务器,您将收到一条简单的“Hello world”消息。这是因为您将 URL 缩短器应用程序中的 urlpatterns 包含到整个项目中。

这只是一个起点。现在是时候创建一个表单,让用户自己创建缩短的 URL。

创建表单

在 Django 中,表单是一个允许从用户获取输入的简单类。

您将创建一个 forms.py 文件。将应用程序的所有形式存储在该文件中是一种惯例。

cd urlshortener/
touch forms.py

在该文件中,您将创建一个从“ModelForm”扩展的类“ShortenerForm”。

'''
短链接表单 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": "请在这里输入您要缩短的链接。"}))
    
    class Meta:
        model = Shortener

        fields = ('long_url',)

它是一个模型表单,因为它的目的是根据用户输入创建一个模型对象。我们还使用了 widget 参数,它允许我们指定“类”(CSS 中的类,而不是 python)属性。这是因为我们稍后将使用bootstrap对应用程序进行样式化。

完成视图

构建表单后是时候创建应用程序的最终业务逻辑了。

导航到views.py短链接应用程序内的文件,然后修改视图home_view。

URL 缩短器应用程序有两种视图:

  1. 主页视图:这显示了较短的表单,如果表单已经提交,则显示新的 URL。

  1. 重定向视图: 这将重定向到长 URL 并将跟随的次数加 1。

让我们从最复杂的主页视图开始。您将需要导入 Shortener 模型和表格。您仍在使用函数,因为我希望您了解视图的所有数据流。此外,您将使用模板的路径(尚未创建)。

主页视图

'''
短链接视图
'''
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 = {}

    # 空白表单
    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)

该视图基于两个条件:

  1. 当 HTTP 方法等于 GET 时:我们仅作为上下文传递,用于创建 Shortener 对象的 Shortener 形式。

  1. 当 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语句保护视图,以防在数据库中找不到短链接。如果找到该对象,它会将times_followed字段加1并使用HttpResponseRedirect函数重定向到与随机代码对应的站点 URL。

更新网址

创建应用程序的两个视图后,就可以通过包含redirect_url_view.

与往常一样,您首先导入视图,然后创建路径函数并作为参数传递:

  • URL路由

  • 指向路径的视图

  • 路径名称

'''
短链接应用路由 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 目录
mkdir -p templates/urlshortener/

注意:双文件夹结构和 Django 模板语言超出了本教程的范围,但您可以在官方文档中阅读它们。

基础模板

Django 允许模板继承。这意味着我们可以有一个基本模板并扩展它以遵循 DRY(不要重复自己)原则。

cd templates/urlshortener
touch base.html

base.html 文件是一种约定,意味着应用程序上的所有其他模板都必须是该模板的扩展。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Django 短链接应用</title>

    <link
      href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/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/bootstrap@5.0.0/dist/js/bootstrap.bundle.min.js"
      integrity="sha384-p34f1UUtsS3wqzfto5wAAmdvj+osOnFyQFpp4Ua3gs/ZVWx6oOypYoCJhGGScy+8"
      crossorigin="anonymous"
    ></script>
  </body>
</html>

我们将使用 bootstrap 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">您的短链接</h2>
    <p>您可以复制下面的短链接并分享给您的朋友</p>
    <p class="">{{new_url}}</p>
    <p><span class="text-danger">原链接:</span> {{long_url}}</p>
  </div>
  {% endif %}
</div>
{% endblock body %}

我将快速解释此模板的数据流:

  • 显示 Shortener 表单。在内部,设置了crsf 令牌(安全原因),并且仅显示表单的长 URL 字段。请记住,该字段具有 CSS 类“form-control form-control-lg”,因为我们在表单中设置了它。

  • 如果发现任何错误,则显示它们

  • 如果 POST 操作成功,则显示新的 URL。

最终结果

恭喜!🎉。您已经使用 Django 构建了一个完整的功能性 URL 缩短器应用程序。

以下是应用程序外观的一些屏幕截图。

主页:

缩短网址时出错:

成功缩短网址:

重定向的网址:

总结

您已完成本教程的结尾。您刚刚回顾了创建 Django 项目的所有主要方面。我希望这个教程对您非常有用。

在本教程中,您:

  • 了解了创建 Django 应用程序的工作流程。

  • 建立了一个简历项目

  • 了解 Django 项目和 Django 应用程序的区别和结构。

  • 发现了 MVT 模式。

  • 创建函数基础视图

  • 使用 Django ORM(对象关系映射器)创建简单模型

非常感谢您学习完了本教程, Django Web 框架还有很多内容要讲,所以请持续关注本博客以获取更多精彩教程。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JKooll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值