Django 框架
在本章中,我们将详细讨论 Django 框架。
Django 是一个用于构建 Web 应用程序的 MVT Web 框架。 Django 网络框架带有如此多的"batteries included"",以至于开发人员常常对所有东西如何协同工作感到惊讶。 添加这么多 batteries 背后的原理是在框架本身中具有通用的 Web 功能,而不是将后者作为单独的库添加。
Django 框架流行背后的主要原因之一是庞大的 Django 社区。 社区如此庞大,以至于专门为它设立了一个单独的网站,来自各个角落的开发人员开发了第三方软件包,包括身份验证、授权、成熟的 Django 支持的 CMS 系统、电子商务附加组件等。 很有可能你正在尝试开发的东西已经被某人开发过了,你只需要将其引入到你的项目中即可。
为什么要使用 Django?
Django 的设计理念是鼓励开发人员快速、简洁、实用地开发网站。 Django 完成任务的实用方法是它在人群中脱颖而出的地方。
如果您打算构建高度可定制的应用程序,例如社交媒体网站,Django 是值得考虑的最佳框架之一。 Django 的优势在于它在用户之间的交互或共享不同类型媒体的能力。 django 的一大优势是它能够利用基于大型社区的支持,这为您提供了高度可定制的第三方插件,可以在您的应用程序中使用。
以下是选择 Django 进行 Web 开发的十大理由 −
Python
Python 可以说是最容易学习的编程语言之一,因为它具有简单的语言结构、流式结构和简单的语法。 它用途广泛,可以运行嵌入在许多设备中的网站、桌面应用程序和移动应用程序,并作为一种流行的脚本语言用于其他应用程序。
Batteries Included
Django 带有公共库,这些库对于构建 URL 路由、身份验证、对象关系映射器 (ORM)、模板系统和 db-schema 迁移等公共功能至关重要。
内置管理员
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的独特优势,有许多流行的网站都是在Django框架之上用Python构建的。 以下是一些完全或部分基于 Django 构建的主要站点。
Disqus
它是全球最受欢迎的博客评论托管网站之一。 通过 Disqus 可以很容易地与大多数流行的 CMS(内容管理系统)集成,例如 WordPress 和许多其他系统。 Django 处理超过 5000 万的用户群,能够满足网站所有者接触他们的社区的需求。
Onion
Onion 网站为他们的讽刺报纸提供了一个在线场所,Django 为其提供了框架。
Bitbucket
Bitbucket 类似于 GitHub,是一种版本控制存储库托管服务。 Bitbucket 和 GitHub 之间的唯一区别是 Bitbucket 托管 mercurial 存储库,而 GitHub 托管 git 存储库。 由于数百万用户与 Bitbucket 相关联,因此 bitbucket 提供的所有服务(如创建 repo、推送代码、添加协作者、提交、拉取请求等)都必须稳定。 Django 负责运行 bitbucket 站点。
Instagram 是一款社交网络应用程序,专为喜欢与所有朋友分享照片和视频的用户打造。 目前Instagram上有很多名人,以便与他们的粉丝保持更近的距离。 Django 框架也在运行 Instagram。
Mozilla Firefox
在 Google Chrome 之后,世界上使用第二广泛的浏览器是 Mozilla 浏览器。 现在Mozilla 的帮助页面是用Django 框架构建的。
全球数以百万计的用户从 Pinterest 发现他们的新想法和灵感。 Pinterest 正在使用 Django 框架(根据他们的要求进行修改)来运行它。
NASA
美国国家航空航天局的官方网站是数百万用户访问和查看由主要机构提供的新闻、图片、视频和播客的地方。 Django 开发了 NASA 官方网站的一些特定部分。
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 等其他应用程序,后者公开了一些"应用程序"对象。
设置 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 提供了六个已安装的应用程序,如下所示 −
'django.contrib.admin'
'django.contrib.auth'
django.contrib.
django.contrib.sessions
django.contrib.messages
django.contrib.staticfiles
MIDDLEWARE − 它有助于我们的 Django 项目运行。 它是一个挂钩到 Django 请求/响应处理的 Python 类。
TEMPLATES − 它定义了文档在前端的显示方式。 Django 模板用于生成任何基于文本的格式。
WSGI_APPLICATION − 我们设置的任何服务器都必须知道 WSGI 文件的位置。 如果您使用的是外部服务器,它将查看自己的设置。 默认情况下,它指向 wsgi.py 中的对象。
DATABASES − 它设置为我们的 Django 项目当前正在访问的数据库。 必须设置默认数据库。 如果我们设置了我们选择的数据库,我们需要提及一些与数据库相关的内容,例如主机、用户、密码、端口、数据库名称和适当的引擎。
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 目录中。
如果一切顺利,您将获得以下输出 −
启动网络服务器
您需要位于包含 manage.py 文件的目录中。 在控制台中,我们可以通过运行 python manage.py runserver 来启动网络服务器,如下所示 −
现在您需要做的就是检查您的网站是否正在运行。 打开您的浏览器(Firefox、Chrome、Safari、Internet Explorer 或您使用的任何浏览器)并输入此地址 −
http://127.0.0.1:8000/
或
http://localhost:8000/ # 因为我们的网络服务器只在我们的本地机器上运行。
恭喜! 您刚刚创建了您的第一个网站并使用网络服务器运行它!
当网络服务器运行时,您不会看到新的命令行提示来输入其他命令。 终端将接受下一个文本但不会执行新命令。 这是因为 Web 服务器持续运行以侦听传入请求。
Django 模型
我们正在尝试创建一个 Django 模型来存储我们博客中的所有帖子。 但要确保它有效,我们需要了解对象。
对象
对象是属性和动作的集合。 让我们通过一个例子来理解这一点。 假设我们要为一只猫建模,我们将创建一个名为 Cat 的对象,它具有 color, age, mood (good/bad/sleepy) , owner (颜色、年龄、心情(好/坏/困)和主人)等属性。
然后猫有一些动作:purr, scratch, feed(发出咕噜声、抓挠或进食)。
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 Model,所以Django知道它应该保存在数据库中。
现在让我们讨论一下我们在上面定义的属性:title、text、created_date、published_date 和 author。 为此,我们需要定义每个字段的类型。
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 文件 并在其中放入以下内容 −
首先,我们导入(include)上一章定义的Post模型。 为了使我们的模型在管理页面上可见,我们需要使用 admin.site.register (Post) 注册模型。
要登录管理站点,您需要创建一个超级用户——一个可以控制站点上所有内容的用户帐户。 因此,停止网络服务器并在命令行中输入 python manage.py createsuperuser,然后按回车键。
好的,是时候看看我们的 Post 模型了。 请记住在控制台中运行 python manage.py run server 来运行 web 服务器。 转到您的浏览器并输入地址 https://127.0.0.1:8000/admin/。 使用我们刚刚选择的凭据登录。 然后你应该看到 Django 管理仪表板如下 −
转到 Posts 并对其进行一些试验。 您可以从任何地方添加许多博客文章和内容。 你的博客看起来像这样 −
这只是 Django 的概述,我们只需几行代码就可以创建一个博客。