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 是公认的最容易学习的编程语言之一,因为它有简单的语言结构、流结构和简单的语法。它非常通用,既能运行网站,也能运行桌面应用程序和嵌入到许多设备中的移动应用程序,并作为一种流行的脚本语言用于其他应用程序。
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 年了。它持续发布、提供更新/更好的版本,其活跃社区每天都在壮大,并且拥有一个由自愿贡献者组成的大核心团队,他们每天都维护和改进代码库。
Who’s Using Django?
由于 Django 独一无二的优势,有许多流行网站都使用 Python 构建在 Django 框架之上。以下是基于 Django 全部或部分构建的一些主要网站。
Disqus
它是全球最受欢迎的博客评论托管网站之一。它可以通过 Disqus 轻松地与大多数流行的 CMS(内容管理系统)集成,例如 WordPress 和许多其他系统。通过满足超过 5000 万用户群的需求,Django 可以让网站所有者与其社区取得联系。
Bitbucket
Bitbucket 类似于 GitHub,是一个版本控制存储库托管服务。Bitbucket 与 GitHub 之间的唯一区别在于 Bitbucket 托管 Mercurial 存储库,而 GitHub 托管 Git 存储库。由于数百万用户使用 Bitbucket,并且 Bitbucket 提供的所有服务(例如创建存储库、推送代码、添加协作者、提交、提交请求等)都必须稳定可靠。Django 负责运行 Bitbucket 网站。
Instagram 是一款社交网络应用,专为那些喜欢与所有朋友分享照片和视频的人打造。目前 Instagram 上有很多名人,以便与粉丝们保持更密切的联系。Django 框架也在运行 Instagram。
The Washington Post
如果世界上有一家有影响力的报纸,那肯定就是《华盛顿邮报》。《华盛顿邮报》的网站是一个非常流行的在线新闻来源,可作为其日报的补充。《华盛顿邮报》的网站拥有巨大的浏览量和流量,而 Django Web 框架能够轻松地应对这些问题。
Installing and Creating a Django project and app
在安装 Django 之前,我们必须确保已经安装了 Python。假设你正在使用 virtualenv,只需 pip install django 就足够了。
Creating Django Project
完成安装后,我们需要创建一个 Django 项目。
在 Windows 机器中运行以下命令将创建如下所示的 Django 项目:
django-admin startproject my_project_name
键入 dir 将显示一个新的文件和一个新的目录,如上所示。
manage.py −manage.py 是一个命令行可执行 Python 文件,它只是 django-admin 的包装器。它帮助我们管理项目,这也暗示在它的名称中。
通过此,它在 myFirstDjangoProject 中创建了一个名为 myFirstDjangoProject 的目录,它表示我们项目的配置根目录。让我们深入探索一下。
Configuring Django
通过将 myFirstDjangoProject 目录称为“配置根”,我们的意思是该目录包含为常规配置我们的 Django 项目而必需的文件。该目录外部的几乎所有内容都将仅关注与项目的模型、视图、路由等相关的“业务逻辑”。将项目连接在一起的所有点都会在此处生成。
-
init .py − 此项为空,并将目录更改为可导入的 Python 包。
-
settings.py − 如名称所示,这是将设置大多数配置项的地方。
-
urls.py − 使用 urls.py 设置 URL。通过此,我们不必在此文件中明确地为项目写入每个 URL。但是,我们必须告诉 Django 声明了 URL 的位置(即,我们需要在 urls.py 中链接其他 URL)。
-
wsgi.py − 此项旨在帮助应用程序投入生产,它类似于其他应用程序,如 Flask、Tornado、Pyramid,它公开一些“应用程序”对象。
Setting the settings
查看 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 提供如下六个已安装的应用程序:
-
MIDDLEWARE − 它帮助我们的 Django 项目运行。它是一个 Python 类,可连接到 Django 请求/响应处理。
-
TEMPLATES − 它定义文档应如何显示在前端。Django 模板用于生成任何基于文本的格式。
-
WSGI_APPLICATION − 我们设置的任何服务器都必须知道 WSGI 文件的位置。如果你使用外部服务器,它将在自身设置中查找。默认情况下,它指向 wsgi.py 中的对象。
-
DATABASES − 它设置到我们的 Django 项目当前正在访问的数据库。设置默认数据库是必须的。如果我们设置我们选择的数据库,我们需要提及与数据库相关的一些内容,如 - HOST、USER、PASSWORD、PORT、数据库 NAME 和适当的 ENGINE。
-
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 目录中。
如果一切顺利,你将获得以下输出 −
Starting the Web Server
你需要在包含 manage.py 文件的目录中。在控制台中,我们可以通过如下所示运行 python manage.py runserver 来启动 Web 服务器 −
现在,你需要做的就是检查你的网站是否正在运行。打开你的浏览器(Firefox、Chrome、Safari、Internet Explorer 或你用任何其他浏览器)并输入此地址 −
或
http://localhost:8000/ # 因为我们的 Web 服务器仅在我们的本地计算机中运行。
恭喜!您刚刚创建了你的第一个网站并使用 Web 服务器运行它!
在 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 目录已创建并且其中包含多个文件。我们项目中的目录和文件应如下所示:
创建应用程序后,我们还需要告诉 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,删除其中的所有内容,并按如下所示编写代码:
首先,我们通过调用 from 或 import 从其他文件中导入一些功能。这样,我们可以通过 from and import 包含一些部分,而不用在每个文件中复制和粘贴相同内容。
class Post(models.Model) - 这行代码定义了我们的模型(它是一个对象)。
-
class 是一个特殊关键字,表示我们正在定义一个对象。
-
Post 是我们模型的名称。始终用大写字母开始类名称。
-
models.Model 表示 Post 是一个 Django 模型,因此 Django 知道它应该保存在数据库中。
现在,让我们讨论一下上面定义的属性:title、text、created_date、published_date 和 author。为此,我们需要定义每个字段的类型。
-
models.CharField - 这就是你用有限的字符来定义文本的方式。
-
Models.TextField - 这是用于长文本,没有限制的。
-
Models.DateTimeField - 这是用于日期和时间的。
-
Models.ForeignKey - 这是与另一模型的链接。
我们使用 def 来定义函数/方法,而 str 是该方法的名称。
方法通常会返回一些内容。在本文中,当我们调用 str () 时,我们会得到一篇 Post 标题下的文本 (字符串)。
Creating tables for models in your database
最后一步是向数据库添加一个新模型。首先,我们必须让 Django 明白我们已对模型做出一些更改。让我们在控制台窗口中使用命令 python manage.py make migrations myBlog 进行此操作,如下所示:-
然后,Django 会准备一个迁移文件,我们现在必须将其应用于数据库。在控制台中,我们可以输入: python manage.py migrate myBlog ,输出应如下所示:-
我们的 Post 模型现在已在我们的数据库中。
Django Admin
我们要添加、编辑和删除刚建模的帖子,现在我们要使用 Django 管理。
所以,让我们打开 myBlog/admin.py file 并把以下内容放入其中 -
首先,我们要导入(包含)在之前的章节中定义的 Post 模型。为了让我们的模型在管理页面中可见,我们需要使用 manage.py createsuperuser (Post)向 admin.site 注册模型。
要登录管理网站,你需要创建一个超级用户帐户,这个帐户可以控制网站上的所有内容。所以,请停止 Web 服务器并在命令行中输入 manage.py createsuperuser ,然后按 Enter。
好,现在是时候看一下我们的 Post 模型了。记住在控制台中运行 python manage.py run server 来运行 Web 服务器。转到浏览器并输入地址 https://127.0.0.1:8000/admin/. ,使用我们刚刚选择的凭据登录。然后,你应看到与以下类似的 Django 管理信息中心:-
转到 Post 并使用它进行一些尝试。你可以从任何地方添加许多博文和内容。你的博文会看起来像这样:-
本课程只是 Django 的概览,我们能够使用几行代码创建一个博文。