Python Web Development Libraries 简明教程

Django Framework

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

Django 是一个用于构建 Web 应用程序的 MVT Web 框架。巨大的 Django Web 框架包含很多“内置信息”,开发者常常惊叹于所有这些是如何协同工作的。添加这么多内置信息的原理是将通用 Web 功能放入框架本身,而不是作为单独的库添加。

Django 框架流行的主要原因之一是它拥有庞大的 Django 社区。社区如此庞大,以至于专门为其创建了一个网站,让来自各地的开发者可以开发第三方包,包括身份验证、授权、功能齐全的 Django 驱动的 CMS 系统、电子商务插件等等。你尝试去开发的东西很有可能已被其他人开发出来了,你只需要将那个整合到你的项目中即可。

Why should you use Django?

Django 的设计是为了鼓励开发者快速、干净、实用地设计地开发网站。Django 以其实用的方式来完成工作而从众多框架中脱颖而出。

如果你计划构建一个高度可定制的应用程序,比如社交媒体网站,Django 是最佳的框架之一。Django 的优势在于它在用户之间的交互以及共享不同类型媒体的能力。Django 的一大优势在于其利用大型社区支持的能力,这给了你高度可定制的第三方即用型插件,用于你的应用程序。

以下是选择 Django 用作 Web 开发的十大理由−

Python

Python 是公认的最容易学习的编程语言之一,因为它有简单的语言结构、流结构和简单的语法。它非常通用,既能运行网站,也能运行桌面应用程序和嵌入到许多设备中的移动应用程序,并作为一种流行的脚本语言用于其他应用程序。

Batteries Included

Django 带有通用的库,这对于构建诸如 URL 路由、身份验证、对象关系映射器 (ORM)、模板系统和 db 架构迁移之类的通用功能非常重要。

Built-in admin

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

Doesn’t get in your way

创建一个 Django 应用程序不会添加任何样板代码和不必要的功能。没有强制要求导入、第三方库以及 XML 配置文件。

Scalable

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

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

Battle tested

Django 在 2005 年首次开源。在 12 年的发展之后,Django 现在不仅运行新闻发布网站,而且还运行 Pinterest、Instagram、Disqus、Bitbucket、EventBrite 和 Zapier 等主要全球性企业的全部或部分业务。这使得其成为一种强大且可靠的 Web 框架,供开发者使用。

Huge package support

由于它有很大的社区支持和庞大的开发者网络,因此你打算做的任何事情很可能以前都已完成过。大量的国际开发者社区通过将他们的项目作为开源包发布,为社区做出贡献。

这些项目的其中一个资料库是 Django 包网站。目前,Django 包列出了超过 3400 个用于我们在 Django 项目中使用的可重复使用的 Django 应用程序、网站和工具。

Actively developed

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

Django 没有此类风险,因为它已经存在 12 年了。它持续发布、提供更新/更好的版本,其活跃社区每天都在壮大,并且拥有一个由自愿贡献者组成的大核心团队,他们每天都维护和改进代码库。

Stable releases

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

在 Django 中,我们有软件的长期支持 (LTS) 版本和一个明确的发布流程,如下图所示:

stable releases

First Class Documentation

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

Who’s Using Django?

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

Disqus

它是全球最受欢迎的博客评论托管网站之一。它可以通过 Disqus 轻松地与大多数流行的 CMS(内容管理系统)集成,例如 WordPress 和许多其他系统。通过满足超过 5000 万用户群的需求,Django 可以让网站所有者与其社区取得联系。

disqus

The Onion

洋葱新闻网为他们的讽刺报纸提供了一个在线场所,Django 为它提供了框架。

onion

Bitbucket

Bitbucket 类似于 GitHub,是一个版本控制存储库托管服务。Bitbucket 与 GitHub 之间的唯一区别在于 Bitbucket 托管 Mercurial 存储库,而 GitHub 托管 Git 存储库。由于数百万用户使用 Bitbucket,并且 Bitbucket 提供的所有服务(例如创建存储库、推送代码、添加协作者、提交、提交请求等)都必须稳定可靠。Django 负责运行 Bitbucket 网站。

bitbucket

Instagram

Instagram 是一款社交网络应用,专为那些喜欢与所有朋友分享照片和视频的人打造。目前 Instagram 上有很多名人,以便与粉丝们保持更密切的联系。Django 框架也在运行 Instagram。

instagram

Mozilla Firefox

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

mozilla firefox

Pinterest

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

pinterest

NASA

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

nasa

The Washington Post

如果世界上有一家有影响力的报纸,那肯定就是《华盛顿邮报》。《华盛顿邮报》的网站是一个非常流行的在线新闻来源,可作为其日报的补充。《华盛顿邮报》的网站拥有巨大的浏览量和流量,而 Django Web 框架能够轻松地应对这些问题。

washington post

Reddit Gifts

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

reddit gifts

Prezi

Prezi 是基于 Django 框架构建的 Microsoft PowerPoint 的云端替代产品。该网站提供了一个虚拟画布,可以对其进行操作、放大和缩小。这提供了整个演示文稿的视图,而不是各个幻灯片。

prezi

Installing and Creating a Django project and app

在安装 Django 之前,我们必须确保已经安装了 Python。假设你正在使用 virtualenv,只需 pip install django 就足够了。

Installing virtual environment and Django

以下是 Windows 环境中安装虚拟环境和 Django 的流程:

virtual environment

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

install django

Creating Django Project

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

在 Windows 机器中运行以下命令将创建如下所示的 Django 项目:

django-admin startproject my_project_name

django project
creating django project

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

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

通过此,它在 myFirstDjangoProject 中创建了一个名为 myFirstDjangoProject 的目录,它表示我们项目的配置根目录。让我们深入探索一下。

Configuring Django

通过将 myFirstDjangoProject 目录称为“配置根”,我们的意思是该目录包含为常规配置我们的 Django 项目而必需的文件。该目录外部的几乎所有内容都将仅关注与项目的模型、视图、路由等相关的“业务逻辑”。将项目连接在一起的所有点都会在此处生成。

configuring django
  1. init .py − 此项为空,并将目录更改为可导入的 Python 包。

  2. settings.py − 如名称所示,这是将设置大多数配置项的地方。

  3. urls.py − 使用 urls.py 设置 URL。通过此,我们不必在此文件中明确地为项目写入每个 URL。但是,我们必须告诉 Django 声明了 URL 的位置(即,我们需要在 urls.py 中链接其他 URL)。

  4. wsgi.py − 此项旨在帮助应用程序投入生产,它类似于其他应用程序,如 Flask、Tornado、Pyramid,它公开一些“应用程序”对象。

Setting the settings

查看 settings.py 将揭示它的大小相当大 - 这只是默认设置。其他我们需要注意的事情是静态文件、数据库、媒体文件、云集成或 Django 项目可以配置的其他几十种方式。让我们了解 settings.py 文件中提到的要点:

  1. BASE_DIR − 对于查找文件,这非常有用。在 setting.py 文件中,BASE_DIR 参数设置基本目录的绝对路径。

  2. SECRET_KEY − 用于制作哈希。通常,我们使用 secret_key 进行 Cookie、会话、CSRF 保护和认证令牌。

  3. DEBUG − 我们可以将它设置为在开发或生成模式下运行项目。

  4. ALLOWED_HOSTS − 我们提供通过它提供我们应用程序的域名列表。在开发模式下,设置是可选的;然而,在生产机器中,我们需要设定我们的 Django 项目。

  5. INSTALLED_APPS − 它是在我们的 Django 项目中当前安装和运行的 Django“应用程序”的列表。内置 Django 提供如下六个已安装的应用程序:

  6. MIDDLEWARE − 它帮助我们的 Django 项目运行。它是一个 Python 类,可连接到 Django 请求/响应处理。

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

  8. WSGI_APPLICATION − 我们设置的任何服务器都必须知道 WSGI 文件的位置。如果你使用外部服务器,它将在自身设置中查找。默认情况下,它指向 wsgi.py 中的对象。

  9. DATABASES − 它设置到我们的 Django 项目当前正在访问的数据库。设置默认数据库是必须的。如果我们设置我们选择的数据库,我们需要提及与数据库相关的一些内容,如 - HOST、USER、PASSWORD、PORT、数据库 NAME 和适当的 ENGINE。

  10. STATIC_URL − 这是在引用 STATIC_ROOT 中位于静态文件时的使用的 URL。默认情况下,它为 None。

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

myFirstDjangoProject/settings.py

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)

Setting up a Database

有很多不同的数据库软件可以存储你网站的数据。我们将使用默认软件 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 目录中。

如果一切顺利,你将获得以下输出 −

setting up database

Starting the Web Server

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

web server

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

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

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

starting web server

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

Django Models

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

Objects

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

然后,Cat 有一些动作:呼噜、抓挠或喂食。

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

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

在构建博客时,我们需要一些文本内容和标题。有作者姓名、创建日期和发布日期也是必要的。

因此,我们的博客将包含以下对象:

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

我们还需要一些用于发布该帖子的方法。在了解了什么是对象之后,我们可以为博客文章创建一个 Django 模型。

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

Creating an application

为了保持清晰明了,我们将在项目中创建一个单独的应用程序。接下来,我们将尝试通过运行以下简单的命令来创建博客 Web 应用程序。

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

creating application

创建应用程序后,我们还需要告诉 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',
]

Creating a blog post model

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

打开 myBlog/models.py,删除其中的所有内容,并按如下所示编写代码:

post model

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

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

  1. class 是一个特殊关键字,表示我们正在定义一个对象。

  2. Post 是我们模型的名称。始终用大写字母开始类名称。

  3. models.Model 表示 Post 是一个 Django 模型,因此 Django 知道它应该保存在数据库中。

现在,让我们讨论一下上面定义的属性:title、text、created_date、published_date 和 author。为此,我们需要定义每个字段的类型。

  1. models.CharField - 这就是你用有限的字符来定义文本的方式。

  2. Models.TextField - 这是用于长文本,没有限制的。

  3. Models.DateTimeField - 这是用于日期和时间的。

  4. Models.ForeignKey - 这是与另一模型的链接。

我们使用 def 来定义函数/方法,而 str 是该方法的名称。

方法通常会返回一些内容。在本文中,当我们调用 str () 时,我们会得到一篇 Post 标题下的文本 (字符串)。

Creating tables for models in your database

最后一步是向数据库添加一个新模型。首先,我们必须让 Django 明白我们已对模型做出一些更改。让我们在控制台窗口中使用命令 python manage.py make migrations myBlog 进行此操作,如下所示:-

migration

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

creating table

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

Django Admin

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

所以,让我们打开 myBlog/admin.py file 并把以下内容放入其中 -

django admin

首先,我们要导入(包含)在之前的章节中定义的 Post 模型。为了让我们的模型在管理页面中可见,我们需要使用 manage.py createsuperuser (Post)向 admin.site 注册模型。

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

create user

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

run server

转到 Post 并使用它进行一些尝试。你可以从任何地方添加许多博文和内容。你的博文会看起来像这样:-

django administration

本课程只是 Django 的概览,我们能够使用几行代码创建一个博文。