Django框架


在本章中,我们将详细讨论 Django 框架。

Django 是一个 MVT Web 框架,用于构建 Web 应用程序。庞大的 Django Web 框架配备了如此多的“电池”,以至于开发人员常常对所有东西如何协同工作感到惊讶。添加如此多电池背后的原则是在框架本身中具有通用的 Web 功能,而不是将后者作为单独的库添加。

Django 框架流行的主要原因之一是庞大的 Django 社区。该社区非常庞大,以至于专门建立了一个单独的网站,来自各个角落的开发人员开发了第三方软件包,包括身份验证、授权、成熟的 Django 支持的 CMS 系统、电子商务附加组件等。您尝试开发的内容很可能已经由某人开发,您只需将其拉入您的项目即可。

为什么要使用 Django?

Django 的设计方式鼓励开发人员快速、简洁且实用的设计开发网站。Django 的突出之处在于其务实的办事方法。

如果您计划构建高度可定制的应用程序(例如社交媒体网站),Django 是值得考虑的最佳框架之一。Django 的优势在于其用户之间的交互或共享不同类型媒体的能力。django 的一大优势是它能够利用基于大型社区的支持,为您提供高度可定制的第三方随时可用的应用程序插件。

以下是选择 Django 进行 Web 开发的十大理由 -

Python

Python 可以说是最容易学习的编程语言之一,因为它具有简单的语言结构、流程结构和简单的语法。它用途广泛,可以运行嵌入在许多设备中的网站、桌面应用程序和移动应用程序,并作为流行的脚本语言在其他应用程序中使用。

包含电池

Django 附带了一些通用库,这些库对于构建 URL 路由、身份验证、对象关系映射器 (ORM)、模板系统和数据库模式迁移等通用功能至关重要。

内置管理员

Django 有一个内置的管理界面,可让您处理模型、用户/组权限以及管理用户。有了模型接口,除了高级数据库功能之外,所有其他功能都不需要单独的数据库管理程序。

不会妨碍你

创建 Django 应用程序不会添加样板文件,也不会添加不必要的功能。没有强制导入、第三方库,也没有 XML 配置文件。

可扩展

Django 基于MVC 设计模式。这意味着所有实体,如 db(数据库)、后端和前端代码都是单独的实体。Django 允许我们将代码与静态媒体(包括构成站点的图片、文件、CSS 和 JavaScript)分离。

Django 支持用于 Web 服务器、缓存、性能管理、集群和平衡的完整第三方库。Django 提供的优势之一是支持主要电子邮件和消息传递应用程序以及服务,例如 ReST 和 OAuth。

经过战斗考验

Django于2005年首次开源。经过12年的发展,Django现在不仅运营新闻发布网站,还运营Pinterest、Instagram、Disqus、Bitbucket、EventBrite和Zapier等全球主要企业的全部或部分。这使其成为一个强大且可靠的 Web 框架。

庞大的封装支持

由于其庞大的社区支持和庞大的开发者网络,无论您打算做什么,很可能以前就已经完成了。大型国际开发者社区通过将其项目作为开源包发布来为社区做出贡献。

这些项目的此类存储库之一是 Django Package 站点。目前,Django 包列出了 3400 多个可在我们的 Django 项目中使用的可重用 Django 应用程序、站点和工具。

积极开发

与开源项目相关的最大风险之一是其可持续性。我们无法确定它是否会持续很长时间。

Django 不存在这样的风险,因为它已经有 12 岁了。它的一致版本、更新/更好的版本和活跃的社区每天都在增长,有一个由自愿贡献者组成的大型核心团队每天维护和改进代码库。

稳定版本

在许多情况下,像 Django 这样的开源软件项目是积极开发的,并且比竞争的专有软件更安全,因为许多开发人员每天都在开发和测试它。然而,开源软件项目的缺点是缺乏商业上可行的开发的稳定代码库。

在 Django 中,我们有该软件的长期支持(LTS)版本和定义的发布流程,如下图所示 -

稳定版本

一流的文档

从第一个版本开始,Django 开发人员就确保必须有适当的综合文档可用,并且教程易于理解。

谁在使用 Django?

由于 Django 的独特优势,有多个流行的网站是在 Django 框架之上使用 Python 构建的。以下是一些完全或部分基于 Django 构建的主要网站。

讨论

它是全球最受欢迎的博客评论托管网站之一。通过 Disqus,可以轻松与 WordPress 等最流行的 CMS(内容管理系统)集成。Django 拥有超过 5000 万的用户群,能够满足网站所有者接触其社区的需求。

讨论

洋葱

Onion 网站为他们的讽刺报纸提供了在线场所,Django 为其提供了框架。

洋葱

位桶

Bitbucket 就像 GitHub 一样,是一个版本控制存储库托管服务。Bitbucket 和 GitHub 之间的唯一区别是 Bitbucket 托管 Mercurial 存储库,而 GitHub 托管 git 存储库。由于数以百万计的用户与 Bitbucket 相关联,因此 bitbucket 提供的所有服务(例如创建存储库、推送代码、添加协作者、提交、拉取请求等)都必须稳定。Django 负责运行 bitbucket 站点。

位桶

Instagram

Instagram 是一款社交网络应用程序,专为那些喜欢与所有朋友分享照片和视频的人而设计。目前Instagram上有很多名人,以便与他们的粉丝拉近距离。Django 框架也在运行 Instagram。

Instagram

火狐浏览器

Mozilla 浏览器是继 Google Chrome 之后世界上使用第二广泛的浏览器。现在Mozilla的帮助页面是用Django框架构建的。

火狐浏览器

兴趣

全球数百万用户从 Pinterest 中发现他们的新想法和灵感。Pinterest 正在使用 Django 框架(根据他们的要求进行修改)来运行它。

兴趣

美国宇航局

美国国家航空航天局的官方网站是数百万用户访问和查看该机构提供的新闻、图像、视频和播客的地方。Django 开发了 NASA 官方网站的一些特定部分。

美国宇航局

华盛顿邮报

如果说世界上有一份有影响力的报纸,那肯定是《华盛顿邮报》。《华盛顿邮报》的网站是一个非常受欢迎的在线新闻来源,与其日报一起使用。其巨大的浏览量和流量可以通过 Django Web 框架轻松处理。

华盛顿邮报

Reddit 礼物

广受欢迎的 Reddit 网站推出了一个名为 Reddit Gifts 的在线匿名礼物交换和聚会平台。该网站连接来自世界各地的用户并促进他们之间的礼物交换。Django Web 框架为其功能提供支持。

Reddit 礼物

普雷齐

Prezi 是基于云的 Microsoft PowerPoint 替代品,构建于 Django 框架之上。该网站提供了一个可以操纵和放大和缩小的虚拟画布。这提供了演示文稿的整个视图,而不是单个幻灯片。

普雷齐

安装并创建 Django 项目和应用程序

在安装Django之前,我们必须确保Python已经安装。假设您使用的是 virtualenv,一个简单的 pip install django 就足够了。

安装虚拟环境和Django

以下是在 Windows 环境中安装虚拟环境和 Django 的过程 -

虚拟环境

要验证 Django 是否已正确安装,请输入以下代码 -

安装Django

创建 Django 项目

安装完成后,我们需要创建一个Django项目。

在 Windows 计算机中运行以下命令将创建以下 django 项目 -

django-admin startproject my_project_name

姜戈项目 创建 Django 项目

输入 dir 将显示一个新文件和一个新目录,如上所示。

manage.py - Manage.py 是一个命令行可执行的 Python 文件,它只是 django-admin 的包装器。它帮助我们管理我们的项目,其名称也暗示了这一点。

这样,它在 myFirstDjangoProject 中创建了一个名为myFirstDjangoProject 的目录,它代表我们项目的配置根目录。让我们更深入地探索它。

配置Django

通过将 myFirstDjangoProject 目录称为“配置根”,我们的意思是该目录包含一般配置 Django 项目所需的文件。几乎该目录之外的所有内容都将仅关注与项目的模型、视图、路线等相关的“业务逻辑”。将项目连接在一起的所有点都将指向这里。

配置Django
  • __init__.py - 这是空的,并将目录更改为可导入的 Python 包。

  • settings.py - 顾名思义,它是设置大多数配置项的地方。

  • urls.py - URL 使用 urls.py 设置。这样,我们就不必在此文件中显式写入项目的每个 URL。然而,我们必须告诉 Django URL 的声明位置(即,我们需要在 urls.py 中链接其他 URL)。

  • Wsgi.py - 这是为了帮助生产中的应用程序,类似于 Flask、Tornado、Pyramid 等公开一些“应用程序”对象的其他应用程序。

设定设置

查看 settings.py 内部会发现其相当大的大小 - 这些只是默认值。我们需要注意的其他事情是静态文件、数据库、媒体文件、云集成或 Django 项目的其他数十种配置方式。让我们了解 settings.py 文件中提到的一些要点 -

  • BASE_DIR - 这对于定位文件很有帮助。在setting.py 文件中,BASE_DIR 参数设置基本目录的绝对路径。

  • SECRET_KEY - 用于生成哈希值。一般来说,我们将 Secret_key 用于 cookie、会话、csrf 保护和身份验证令牌。

  • DEBUG - 我们可以将其设置为在开发或生产模式下运行的项目。

  • ALLOWED_HOSTS - 我们提供为我们的应用程序提供服务的主机名列表。开发模式下,可选设置;但是,在生产机器中,我们需要设置 Django 项目。

  • INSTALLED_APPS - 这是当前在我们的 Django 项目中安装和运行的 Django “应用程序”的列表。内置 Django 提供了六个已安装的应用程序,如下所示 -

    • 'django.contrib.admin'

    • 'django.contrib.auth'

    • django.contrib。

    • django.contrib.sessions

    • django.contrib.messages

    • django.contrib.staticfiles

  • 中间件- 它帮助我们的 Django 项目运行。它是一个挂钩 django 请求/响应处理的 python 类。

  • 模板- 它定义文档应如何在前端显示。Django 模板用于生成任何基于文本的格式。

  • WSGI_APPLICATION - 我们设置的任何服务器都必须知道 WSGI 文件在哪里。如果您使用外部服务器,它将查看自己的设置。默认情况下,它指向wsgi.py中的对象。

  • DATABASES - 它设置为我们的 Django 项目当前正在访问的数据库。必须设置默认数据库。如果我们设置我们选择的数据库,我们需要提及一些与数据库相关的信息,例如主机、用户、密码、端口、数据库名称和适当的引擎。

  • STATIC_URL - 这是引用位于 STATIC_ROOT 中的静态文件时使用的 URL。默认情况下,它是“无”。

但是,我们可能需要添加静态文件的路径。转到文件末尾,在 STATIC_URL 条目下方添加一个名为 STATIC_ROOT 的新条目,如下所示 -

myFirstDjangoProject/settings.py

STATIC_URL = '/静态/'

STATIC_ROOT = os.path.join(BASE_DIR, '静态')

设置数据库

有许多不同的数据库软件可以存储您网站的日期。我们将使用默认的 sqlite3。

这已经在myFirstDjangoProject/settings.py的以下给定部分中设置-

DATABASES = {
   'default': {
      'ENGINE': 'django.db.backends.sqlite3',
      'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
   }
}

要为我们的博客创建数据库,让我们在控制台中运行以下命令 - python manage.py migrate(我们需要位于包含 manage.py 文件的 myFirstDjangoProject 目录中。

如果一切顺利,您将得到以下输出 -

设置数据库

启动网络服务器

您需要位于包含manage.py 文件的目录中。在控制台中,我们可以通过运行 python manage.py runserver 来启动 Web 服务器,如下所示 -

网络服务器

现在您需要做的就是检查您的网站是否正在运行。打开您的浏览器(Firefox、Chrome、Safari、Internet Explorer 或您使用的任何浏览器)并输入此地址 -

http://127.0.0.1:8000/

或者

http://localhost:8000/ # 因为我们的网络服务器仅在本地计算机上运行。

恭喜!您刚刚创建了您的第一个网站并使用网络服务器运行它!

启动网络服务器

当 Web 服务器运行时,您不会看到用于输入其他命令的新命令行提示。终端将接受下一个文本,但不会执行新命令。这是因为 Web 服务器持续运行以侦听传入请求。

姜戈模型

我们正在尝试创建一个 Django 模型来存储我们博客中的所有帖子。但为了确保它有效,我们需要了解对象。

对象

对象是属性和操作的集合。让我们通过一个例子来理解这一点。假设我们想要建模一只猫,我们将创建一个名为 Cat 的对象,它具有颜色、年龄、情绪(好/坏/困)和主人等属性。

然后猫会做出一些动作:发出Grunt声、抓挠或喂食。

Cat 
-------- 
color 
age 
mood 
owner 
purr() 
scratch() 
feed(cat_food) 
CatFood 
-------- 
taste

所以基本上我们试图用属性(称为对象属性)和操作(称为方法)来描述代码中的真实事物。

当我们构建博客时,我们需要一些文本内容和标题。还需要有作者姓名、创作日期和出版日期。

所以我们的博客将有以下对象 -

Post 
-------- 
title 
text 
author 
created_date 
published_date

我们还需要有一些方法来发布该帖子。现在我们知道什么是对象,我们可以为我们的博客文章创建一个 Django 模型。

模型是 Django 中一种特殊的对象,保存在数据库中。我们将把数据存储在 SQLite 数据库中。

创建应用程序

为了使一切清晰,我们将在项目中创建一个单独的应用程序。下面,我们将尝试通过运行下面提到的简单命令来创建一个博客 Web 应用程序。

现在我们会注意到创建了一个新的 myBlog 目录,并且它现在包含许多文件。我们项目中的目录和文件应如下所示 -

创建应用程序

创建应用程序后,我们还需要告诉 Django 使用它。我们在文件 myFirstDjangoProject/settings.py 中执行此操作。

INSTALLED_APPS = [
   'django.contrib.admin',
   'django.contrib.auth',
   'django.contrib.contenttypes',
   'django.contrib.sessions',
   'django.contrib.messages',
   'django.contrib.staticfiles',
   'myBlog',
]

创建博客文章模型

myBlog/models.py文件中,我们定义了所有称为模型的对象 - 这是我们定义博客文章的地方。

让我们打开 myBlog/models.py,删除其中的所有内容,然后编写如下代码 -

邮政模型

首先,我们通过calling from或import从其他文件导入一些功能。因此,有了这个,我们可以使用from 和 import包含一些部分,而不是在每个文件中复制和粘贴相同的内容。

class Post(models.Model) - 这一行定义了我们的模型(它是一个对象)。

  • class 是一个特殊的关键字,表明我们正在定义一个对象。

  • Post 是我们模型的名称。类名始终以大写字母开头。

  • models.Model 意味着该 Post 是 Django 模型,因此 Django 知道它应该保存在数据库中。

现在让我们讨论上面定义的属性:标题、文本、创建日期、发布日期和作者。为此,我们需要定义每个字段的类型。

  • models.CharField - 这是定义具有有限数量字符的文本的方式。

  • Models.TextField - 用于无限制的长文本。

  • Models.DateTimeField - 用于日期和时间。

  • Models.ForeignKey - 这是另一个模型的链接。

我们用def定义一个函数/方法,publish 是方法的名称。

方法通常会返回一些东西。这里,当我们调用 __str__() 时,我们将获得带有帖子标题的文本(字符串)。

在数据库中为模型创建表

最后一步是将新模型添加到我们的数据库中。首先,我们必须让 Django 了解我们对模型进行了一些更改。让我们在控制台窗口中使用命令python manage.py make migrations myBlog执行相同的操作,如下所示 -

移民

然后,Django 准备一个迁移文件,我们现在必须将其应用到我们的数据库。在我们的控制台中,我们可以输入:python manage.py migrate myBlog,输出应如下所示 -

创建表

我们的 Post 模型现在已在我们的数据库中。

Django 管理员

要添加、编辑和删除我们刚刚建模的帖子,我们使用 Django admin。

因此,让我们打开myBlog/admin.py 文件并将以下内容放入其中 -

Django 管理员

首先,我们导入(包含)上一章中定义的 Post 模型。为了使我们的模型在管理页面上可见,我们需要使用 admin.site.register (Post) 注册模型。

要登录管理站点,您需要创建一个超级用户 - 一个可以控制站点上所有内容的用户帐户。因此,停止网络服务器并在命令行中输入 python manage.py createsuperuser,然后按 Enter 键。

创建用户

好的,现在是时候看看我们的 Post 模型了。请记住在控制台中运行 python manage.py run server 来运行 Web 服务器。转到浏览器并输入地址https://127.0.0.1:8000/admin/。使用我们刚刚选择的凭据登录。然后你应该看到 Django 管理仪表板,如下所示 -

运行服务器

转到帖子并进行一些实验。您可以从任何地方添加许多博客文章和内容。你的博客看起来像这样 -

Django 管理

这只是 Django 的概述,我们只需几行代码就可以创建一个博客。