Django 框架
本章将详细讨论 Django 框架。
Django 是一个 MVT web 框架,用于构建 web 应用程序。庞大的 Django web 框架包含了许多“内置电池”,开发人员常常惊叹于所有组件是如何协同工作的。添加如此多“电池”的原则是将常见的 web 功能集成到框架本身,而不是以后作为单独的库添加。
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 包站点就是这些项目的其中一个存储库。目前,Django 包列出了 3400 多个可在我们的 Django 项目中使用的可重用 Django 应用程序、站点和工具。
积极开发
开源项目面临的最大风险之一是其可持续性。我们无法确定它能持续多久。
Django 没有这种风险,因为它已经有 12 年的历史了。它持续发布新版本,更新/更好的版本,活跃的社区每天都在壮大,并且有一个庞大的核心志愿者团队每天都在维护和改进代码库。
稳定的版本
像 Django 这样的开源软件项目在许多情况下都积极开发,并且比竞争对手的专有软件更安全,因为许多开发人员每天都在开发和测试它。但是,开源软件项目的缺点是缺乏稳定的代码库来进行商业化的开发。
在 Django 中,我们有软件的长期支持 (LTS) 版本和定义的发布流程,如下面的图像所示:
一流的文档
从一开始,Django 开发人员就确保必须提供适当的综合文档,并且教程易于理解。
谁在使用 Django?
由于 Django 的独特优势,有多个流行的网站是基于 Python 和 Django 框架构建的。以下是一些完全或部分基于 Django 构建的主要站点。
Disqus
它是全球最受欢迎的博客评论托管网站之一。它很容易与大多数流行的 CMS(内容管理系统)如 WordPress 等集成。通过 Disqus 处理超过 5000 万的用户群,Django 能够满足网站所有者与社区联系的需求。
洋葱新闻 (The Onion)
洋葱新闻网站为其讽刺新闻提供在线平台,Django 为其提供框架。
Bitbucket
Bitbucket 类似于 GitHub,是一个版本控制存储库托管服务。Bitbucket 和 GitHub 之间的唯一区别在于 Bitbucket 托管 Mercurial 存储库,而 GitHub 托管 Git 存储库。由于数百万用户与 Bitbucket 相关联,并且 Bitbucket 提供的所有服务(如创建存储库、推送代码、添加协作者、提交、拉取请求等)必须稳定。Django 负责运行 Bitbucket 网站。
Instagram 是一款社交网络应用程序,专为那些喜欢与所有朋友分享照片和视频的人而设计。目前 Instagram 上有很多名人,以便与他们的粉丝保持更紧密的联系。Django 框架也运行着 Instagram。
Mozilla Firefox
继 Google Chrome 之后,世界上使用第二广泛的浏览器是 Mozilla 浏览器。现在 Mozilla 的帮助页面是用 Django 框架构建的。
全球数百万用户从 Pinterest 发现新的想法和灵感。Pinterest 使用 Django 框架(根据其需求进行了修改)来运行。
NASA
美国国家航空航天局的官方网站是数百万用户访问并查看该主要机构提供的新闻、图片、视频和播客的地方。Django 开发了官方 NASA 网站的某些特定部分。
华盛顿邮报 (The Washington Post)
如果世界上有一家有影响力的报纸,那无疑是华盛顿邮报。华盛顿邮报的网站是一个非常受欢迎的在线新闻来源,与他们的日报相辅相成。Django web 框架轻松地处理了其庞大的访问量和流量。
Reddit 礼物 (Reddit Gifts)
广受欢迎的 Reddit 网站推出了一个名为 Reddit Gifts 的在线匿名礼物交换和聚会平台。该网站将来自世界各地的用户联系起来,并促进他们之间的礼物交换。Django web 框架为其功能提供支持。
Prezi
Prezi 是基于 Django 框架构建的 Microsoft PowerPoint 的基于云的替代方案。该网站提供一个虚拟画布,可以对其进行操作并进行放大和缩小。这提供了演示的完整视图,而不是单个幻灯片。
安装和创建 Django 项目和应用程序
在安装 Django 之前,我们必须确保已安装 Python。假设您使用的是 virtualenv,则简单的 pip install django 就足够了。
安装虚拟环境和 Django
以下是Windows环境中安装虚拟环境和Django的步骤:
要验证 Django 是否已正确安装,请键入以下代码:
创建 Django 项目
安装完成后,我们需要创建一个 Django 项目。
在您的 Windows 机器上运行以下命令将创建以下 Django 项目:
django-admin startproject my_project_name
键入 dir 将显示一个新文件和一个新目录,如上所示。
manage.py – manage.py 是一个命令行可执行的 Python 文件,它只是 django-admin 的一个包装器。它帮助我们管理我们的项目,这在其名称中也有暗示。
这样,它就在 myFirstDjangoProject 内创建了一个名为 myFirstDjangoProject 的目录,该目录代表我们项目的配置根目录。让我们更深入地探索它。
配置 Django
将 myFirstDjangoProject 目录称为“配置根目录”,是指该目录包含通常配置 Django 项目所需的文件。该目录之外的所有内容都将仅专注于与项目的模型、视图、路由等相关的“业务逻辑”。连接项目的所有点都将指向这里。
__init__.py – 此文件为空,并将目录更改为可导入的 Python 包。
settings.py – 正如其名称所示,它是设置大多数配置项的地方。
urls.py – URL 在 urls.py 中设置。这样,我们不必在此文件中显式编写项目的每个 URL。但是,我们必须告诉 Django URL 在何处声明(即,我们需要在 urls.py 中链接其他 URL)。
wsgi.py – 这有助于在生产环境中运行应用程序,类似于 Flask、Tornado、Pyramid 等其他应用程序,它公开了一些“app”对象。
设置设置
查看 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
MIDDLEWARE – 它帮助我们的 Django 项目运行。它是一个 Python 类,它挂接到 Django 请求/响应处理中。
TEMPLATES – 它定义了文档如何在前端显示。Django 模板用于生成任何基于文本的格式。
WSGI_APPLICATION – 我们设置的任何服务器都必须知道 WSGI 文件在哪里。如果您使用的是外部服务器,它将在其自己的设置中查找。默认情况下,它指向 wsgi.py 中的对象。
数据库 (DATABASES) − 它设置了 Django 项目当前访问的数据库。必须设置默认数据库。如果我们设置了选择的数据库,我们需要提及一些与数据库相关的信息,例如:主机 (HOST)、用户 (USER)、密码 (PASSWORD)、端口 (PORT)、数据库名称 (database NAME) 和相应的引擎 (ENGINE)。
静态文件 URL (STATIC_URL) − 这是引用位于 STATIC_ROOT 中的静态文件时使用的 URL。默认情况下为 None。
但是,我们可能需要添加静态文件的路径。转到文件末尾,在 STATIC_URL 条目下方,添加一个名为 STATIC_ROOT 的新条目,如下所示:
myFirstDjangoProject/settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, ‘static’)
设置数据库
有很多不同的数据库软件可以存储网站数据。我们将使用默认的 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 目录中)。
如果一切顺利,您将得到以下输出:
启动 Web 服务器
您需要在包含 manage.py 文件的目录中。在控制台中,我们可以通过运行 python manage.py runserver 来启动 Web 服务器,如下所示:
现在,您只需要检查您的网站是否正在运行。打开您的浏览器(Firefox、Chrome、Safari、Internet Explorer 或您使用的任何浏览器),然后输入以下地址:
http://127.0.0.1:8000/
或
https://127.0.0.1:8000/ # 因为我们的 Web 服务器仅在本地机器上运行。
恭喜!您刚刚创建了您的第一个网站,并使用 Web 服务器运行它!
在 Web 服务器运行期间,您将看不到新的命令行提示符来输入其他命令。终端将接受下一个文本,但不会执行新命令。这是因为 Web 服务器持续运行以监听传入请求。
Django 模型
我们正在尝试创建一个 Django 模型来存储我们博客中的所有帖子。但为了确保它有效,我们需要了解对象。
对象
对象是属性和动作的集合。让我们用一个例子来理解这一点。假设我们要建模一只猫,我们将创建一个名为 Cat 的对象,它具有颜色、年龄、情绪(好/坏/困倦)和主人等属性。
然后猫有一些动作:咕噜、抓挠或喂食。
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,删除其中的所有内容,并编写如下代码:
首先,我们通过调用 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 管理员。
因此,让我们打开 myBlog/admin.py 文件,并将以下内容放入其中:
首先,我们导入(包含)上一章中定义的 Post 模型。为了使我们的模型在管理员页面上可见,我们需要使用 admin.site.register(Post) 注册模型。
要登录到管理员站点,您需要创建一个超级用户——一个可以控制站点上所有内容的用户帐户。因此,停止 Web 服务器并在命令行中键入 python manage.py createsuperuser,然后按 Enter 键。
好的,现在是查看我们的 Post 模型的时候了。记住在控制台中运行 python manage.py runserver 来运行 Web 服务器。转到您的浏览器并键入地址 https://127.0.0.1:8000/admin/。 使用我们刚刚选择的凭据登录。然后您应该看到如下所示的 Django 管理员仪表板:
转到帖子,并进行一些实验。您可以从任何地方添加许多博客帖子和内容。您的博客将如下所示:
这只是 Django 的概述,我们只需几行代码就可以创建一个博客。