欢迎来到本课程中的终极 django 课程
，我将教
您关于 django
的所有知识，从最基本的到更高级的
概念，
因此在本课程结束时，您将
能够使用 django 来构建
产品- 为您的 Web
和移动应用程序的后端评分 如果您一直
想学习使用 Python 进行 Web 开发，
那么您来对地方了 如果您是，
我们将使用 Python 和 django 为电子商务应用程序构建和
部署后端
寻找一门全面的、
有组织的、实用的课程，
让你从零到英雄，
并为你的工作做好准备，这是
适合你的 django 课程
你需要了解的关于 django 的一切都
按正确的顺序放在一个地方，
所以你不需要
在随机教程
amash hamadani 之间来回跳转，我已经通过我的 youtube 频道和 mosh.com 的在线学校代码教了数百
万人如何提高他们的软件
工程技能
，
如果你是新来的，一定要 订阅，
因为我一直在上传新
视频 现在让我们进入并开始
让我们谈谈您需要了解的内容
为初学者学习本课程
您需要了解 Python 您需要了解
Python 的基础知识
以及面向对象的编程
类
继承多态等概念你
还应该了解关系数据库的基础知识
所以你应该熟悉
表列
主外键关系
等概念如果你需要刷新
基础我有几个初学者
我的 youtube 频道上的级别教程
以及我的网站 codewithmosh.com 上的综合课程
我会把
链接放在下面，以防你有
兴趣，
所以我假设你是
这门课程的合适学生，现在
让我们 首先谈谈你应该如何
学习这门课程
我希望你从头到尾
全程观看这门课程
，
即使你熟悉 django
be 因为
在此过程中，我将分享很多技巧
和窍门，
如果您参加过我的任何其他课程，我不希望您错过其中任何一个，
您知道我不会
浪费您的时间
重复或 没用的东西所以一定
要在看每节课的
同时现在看每节课我希望
你做笔记如果你不想写很多笔记，
你可以在一张纸上写一些关键词
我坚信这个行为
把事情写下来会帮助你
记住你学到的新东西，
然后在每节课之后复习你的
笔记并重复我在视频中向你展示的相同步骤
这正是我个人学习
新事物的方式，
我也精心设计了大量的
练习 这有助于你理解和
记住这些材料，所以一定
要做所有这些练习，因为
你练习
得越多，你在 Django 或编码方面就会越好
，
欢迎回到本节的终极 Django
课程，我们将
讨论 abo 首先是 django 的基础知识，
我将向您简要
介绍什么是 django 以及
它为何如此受欢迎，然后我们将讨论
每个 Web 开发人员必须了解的基本 Web 开发概念
接下来我们将设置我们的机器以进行
开发和 创建
我们的第一个 django 项目，一旦该
项目启动并运行，
我将向您展示
调试 django 应用程序的两种基本技术，
这将是对 django 的简短而甜蜜的
介绍，所以
让我们跳进去开始吧
，什么是 django，为什么是它 如此
流行的
django 是一个免费的开源
框架，用于使用 Python 构建 Web 应用程序
它不是 Python 的唯一 Web 框架，
但它是
最受欢迎的框架，因为它帮助我们
在更短的时间内
用更少的代码行构建网站，这就是为什么
很多 像 youtube
instagram spotify 和 dropbox 这样的公司
在他们的技术堆栈中使用 django
现在 django 是我们所说的包含电池的
框架，这意味着
它带有很多 o f 功能
开箱即用，因此我们不必从头开始编写它们
，例如它为我们提供了一个管理
界面来管理我们的数据，
这大大节省了时间
它还有一个对象关系
映射器来抽象数据库，
以便我们可以查询 或者在不编写大量 sql 代码的情况下持久化数据
它还带有一个用于识别用户的身份验证
包它还有一个用于缓存数据的包
等等，因为 django 提供了所有这些惊人的
功能，
我们可以专注于我们的应用程序及其
要求 不必重新发明
轮子
，现在偶尔从头开始编写所有这些功能，
您可能会
遇到
像我们流行的超级明星
开发人员约翰·史密斯这样的人，他认为 django
是一个废话，
因为它陈旧而且臃肿，有这么多功能
他 使用它
讨厌它，然后
用一个新的闪亮的框架重写了他的整个项目，这个
框架更快，
说一个框架比 django 更好，
因为它更快，有点
像
说法拉利比卡车好，因为
它
更快，如果你想移动一些东西，
你不会使用你的法拉利
，
所以聪明的软件工程师不会
仅仅根据他的表现来选择一个框架
，所以 您还需要考虑许多其他事情，
例如框架的成熟
度 从一个版本到另一个版本的稳定性如何
学习曲线
社区的规模等等
django 已经存在了很长时间
，并且拥有庞大的
社区 社区构建了大量 django 包
，您可以
在您的应用程序中重用它们，
如果您遇到困难，总会
有人帮助您，
如果您想雇用人员，有
很多人可供选择，所以这些
是好处 现在
在框架周围有一个
关于 django 功能的庞大社区 是的
django 有很多功能，
但你不必使用甚至学习
所有这些功能，因为
所有这些功能都是可选的，所以 你
可以使用对你的应用程序有意义的功能，
所以在我看来，关于
世界上最好的框架的争论是没有用的，
我们都喜欢不同的东西，仅仅
因为有人不喜欢 django 这
并不意味着
很多公司都很糟糕 正在使用 django 并
在美国寻找 django 开发人员
]
所以你了解到 django 是一个用 python
构建 web 应用程序的框架
现在让我们谈谈
构建 web 应用程序需要了解的一些基本概念
假设我们将构建一个在线
商店并在 moshby.com 上发布它
现在这个网站将有两个
部分或两个应用程序
一个前端和一个后端前端
是加载
在客户端机器上的 Web 浏览器中
的部分 用户看到并
与后端交互的部分是运行在 Web 服务器上的部分
，负责数据处理
验证业务规则等等
现在让我们想象一下 alice 想要
访问我们的网站，
所以她将她的浏览器指向 moshby.com
这个地址 也称为 url，它
是统一
资源定位器的缩写，它基本上是
在我们的互联网上定位资源的
一种方式，资源可以是网页、图像、
视频、pdf 等等，因此 alice
在她的浏览器中输入 moshby.com 并按下
此时输入浏览器向
托管我们网站的 Web 服务器发送请求，
并说
嘿 alice 想要查看主页，
因此 Web 服务器应处理此请求
并将响应返回
给客户端
此数据交换已定义 通过一个
叫做 http 的协议
，它是超文本传输协议的缩写，
它定义了客户端和服务器如何
通信，
所以这是大图，因为 alice
浏览我们网站
的每一页她的眉毛 ser 向服务器发送一个 http
请求
并接收一个 http 响应，
作为为此网站构建后端的一部分，
我们需要决定我们将如何
响应客户端 一种选择是
在服务器上生成请求的页面
并返回它 对于客户端，我们使用
html 表示 html 是
超文本标记语言的缩写，它是一种表示网页及其内容的简单
语言，
您在互联网上看到的每个网页
都是使用 html 构建的，
因此一个选择是在服务器上生成页面
并返回 一个 html
文档给客户端另一个选择
是只返回请求页面上需要的数据
并让客户端生成页面，所以我们只返回数据，
而不是在 http 响应中放置一个完整的页面或
一个完整的 html 文档
现在的产品列表 如果我们
将这个责任推给客户端，
我们可以释放服务器，以便它可以
为更多客户端提供服务
我们的应用程序将更具可扩展性
这就是为什么在过去几年中
这种方法变得更加流行，
现在被认为是行业最佳
实践，如今
我们拥有诸如 react
angular 和 vue 之类的工具
来在客户端生成网页，
这些都是
前端使用的客户端工具 - 端开发
人员相比之下，我们有
用于构建后端
django 的服务器端工具属于这一类，因此您
不应该将 django 与我们说
react
进行比较，您可以将 django 与其他
服务器端框架
进行比较，例如 c-sharp 开发人员
表示由 javascript 开发人员等使用，
因此如果我们将生成网页的责任推
给客户端
，服务器本质上成为服务器上数据的网关
，
我们可以提供
客户端可以与之交谈
以获取或 保存各种数据
，例如我们可以提供一个端点
来获取产品列表和另一个
端点来获取某人现在下的订单列表
所有这些端点 ints 一起
代表客户端用来与服务器通信的接口，
我们说服务器
为客户端提供了一个 api
或应用程序编程接口
，这个 api 本质上就像
遥控器上的按钮，
所有这些按钮一起代表
接口或 我们用来与电视交互的 api
好吧，所以在本课程中，我们的重点将
放在使用 django
为我们的在线商店构建 api
客户端应用程序可以使用此 api 来
获取或保存数据
这些客户端的构建方式
在这里无关紧要我们可以 使用 react
angular 甚至是
属于前端开发的普通 javascript，
一旦我们构建了这个 api，如果你知道
前端开发，那么你
总是可以构建一个与这个 api 对话的客户端应用程序，
现在你明白了，这与 django 无关
大局 我们已准备好设置我们的
开发环境
，这就是我们接下来要做的
[音乐]
好吧，让我们确保您有
正确的设置 我们开始编码
我想让你做的第一件事就是
将你的 python 升级到最新
版本，
所以转到 python.org 下载并
下载
适用于你的
操作系统的最新版本的 python，然后打开你的
终端窗口和 运行
python 版本以确保你现在
正确升级了你的 python
在这里我们看到 python 2.7 因为在
mac 上我们有两个不同版本的
python 并排运行
我们有旧的 python 2 现在
已
弃用我们还有 python 3。所以 如果您
使用的是 mac
，则必须运行 python3 dash dash
版本，
但如果您使用的是 Windows 或 linux，
则必须运行 python
版本，所以这里我使用的是 python
3.9.5，接下来我们将使用 pip
或 pip3 如果你在 mac 上安装
pip ni 在我的 python 课程中谈到了 paypal
它基本上是一个依赖管理
工具，用于在虚拟环境中安装我们的应用程序
依赖项
，这样我们的
应用程序依赖项就不会
与 ot 冲突 她的应用程序依赖项
没问题，所以
让我们继续
在本课程中安装它，就像我的其他
课程一样我将使用 Visual Studio
代码或 vs 代码作为我的编辑器
如果您喜欢不同的
工具 pycharm 说得很好
，我强烈建议
您使用 vs 代码，
因为在整个课程中，我
将向您展示许多快捷方式和
节省时间的技巧，如果您没有 vs 代码，这些技巧将不适用于
您的编辑器
一旦你运行它，你现在可以从 code.visualstudio.com 得到它我希望你去
这里的扩展面板
并搜索 python
确保安装这个扩展，因为
这样我们可以获得
智能调试代码导航
等功能
好了，现在我们已经安装了
所有必要的工具，让我们创建我们的
第一个 django 项目，
所以在终端窗口中，我
要去我的桌面，
你可以去你机器
上没有的任何地方 现在真的很重要，我们将
创建
一个名为 store front 的目录，这
是我们项目的名称
接下来我们进入这个目录并运行
pip 并安装 django 所以我们将
在虚拟环境中使用 pip app 安装 django
现在让我们 继续
好吧 看看所以在这里
你可以看到 p-band 已经
为这个项目创建了一个虚拟环境
在下面你可以看到这个虚拟环境的路径
但是如果你在 windows 上你会
看到 像 c 驱动器
反斜杠之类的东西，如果您现在使用的是
mac 并使用 z shell，这是一个
漂亮的
彩色终端窗口，您可以
按住命令键
并单击此路径进入它，
否则我们可以复制它
并使用 cd 命令进入这个
目录
现在看看所以这是我们
在这个环境中的虚拟环境我们有这个 bin
文件夹，其中包含一堆二进制文件
例如我们有 python pip django
admin
等等回到终端 l pbn 创建了一个
虚拟环境并
在该环境中安装了 django
但除了这个
ppm 还在这个目录中创建了两个文件
pip file 和 pay file.log 所以我
将通过运行 code period 使用 Visual Studio 代码打开这个目录
，如果 这
在您的机器上不起作用，
只需将此文件夹拖放到 vs
代码上就可以了，
所以这是我们的 pip 文件，这
类似于 javascript 项目的 package.json，
因此在此文件中，我们可以看到我们的
项目需要
此特定版本的 python 及
以下 包你可以
看到我们的应用程序依赖的包，
所以这里我们有 django 等于星号
，这意味着
任何版本或最新版本的
django
如果我们安装了特定版本的
django 我们会在这里看到那个版本
现在回到我们的终端窗口
需要激活这个虚拟环境，
所以我们将在这个虚拟环境中使用 python 解释器，
而不是在这台机器上全局安装的那个解释
器 我们
将运行
ppm shell
好吧接下来我们将使用 django
admin
来启动一个新项目 django admin 是
django 附带的一个实用程序，
因此如果您运行它，我们可以看到所有
这些我们可以
用来工作的命令 在学习 django 项目时，
您将
在本课中熟悉此命令，我们将
使用
django admin start project
，现在我们将调用该项目
store
front 回到 vs code django admin 创建
此目录 对于我们的项目
和这个目录，它在这个目录中创建了
另一个目录
，这是我们应用程序的核心，
我们有这些文件，
我将在稍后讨论，
但在我这样做之前，让我们摆脱这种
冗余，
因为我们有 三个店面
目录
，最上面的一个是我们
之前在终端中创建的
目录，然后我们还有另外两个目录，一个用于项目，
一个用于我们的应用程序的核心，所以
我要删除
这个项目主管 现在我们回到
了上一步，所以
在这个阶段我们没有 django 项目
现在回到终端让我们调出
最后一个命令，
但在最后输入句点这告诉
django 使用当前目录作为
项目 目录，所以 django 不会
为我们的项目创建一个额外的目录，
现在看看，所以我们有这个
目录
，它是我们应用程序的核心在
这个目录中，我们有
这个 init 文件，它将这个
目录定义为一个包，
我们有这个设置 我们在其中
定义应用程序设置
的模块 我们有 urls 模块，我们在其中定义
应用程序的 urls
和这两个
用于部署
的其他模块，现在不要担心它们现在
在这个目录旁边我们有
这个文件 manage.pi 这是一个
围绕 django admin 的包装所以
我们将使用 manage.pi 而不是 django admin
原因是 manage.pi
考虑了这个项目的设置
让我展示 你我的意思是，现在
我们有一个项目，
我们想要运行一个 web 服务器，
所以 django admin 提供的另一个命令是
run server 但是如果你在 django
admin
run server 上，我们会收到一个错误，说
请求设置调试但设置
不是 配置，
因为此时 django admin
不知道
我们项目的设置，所以现在我们
有一个项目
而不是 django admin 我们将
运行 python
manage.pi 现在看起来我们看到了与
django admin 提供的相同的命令 在这里我们
可以说
python manage.pi run server
now 可选我们可以提供一个端口
号，
如果我们默认不提供它这
将使用端口 8000 但你可能有
另一个应用程序在端口 8000 上运行，
在这种情况下你可能想要
明确 设置端口号，
所以让我们继续进行，现在我们没有
收到错误，
因为管理 pi 现在知道
我们项目的设置，
在这里我们收到此警告，说您
有 18 个
未应用的迁移，不用担心
t 不过我们很快就会讨论这个问题，
所以如果你看这里，你会
看到 django 已经
在这个地址启动了一个开发服务器，所以
我们可以复制它并将其粘贴到
浏览器中，
或者如果你使用的是 mac 并使用 z shell
你可以按住命令键并
点击这个很好，很漂亮，
我们的第一个 django 项目
成功运行，让我们继续
下一课
[音乐]
到目前为止我一直在使用单独的
终端窗口，但 vs 代码也有
一个集成终端 窗口
更容易使用，但要使用我们必须
正确配置它以
在我们的虚拟环境中使用 python 解释器让我
向您展示如何做到这一点
所以首先回到我们的终端窗口，
我们将停止 Web
服务器 现在按 ctrl 和 c 可以
回到视图菜单下顶部的 vs 代码中，
看我们有这个命令托盘
Mac 上的快捷方式是
shift 命令和 p
现在在这里我们要搜索
python 解释器
所以目前 vs 代码正在使用这个
Python
全局安装在这台机器上的解释器我们
不想使用它你想
在我们的虚拟环境中使用它但是
我们如何非常容易地找到我们的虚拟环境的路径
所以回到终端
让我们运行 pip 和 dash dash vm
好吧，这里是路径，所以让我们现在将
这个
好的复制回 vs 代码，我们将
选择
输入解释器路径，然后我们
将粘贴路径
并在末尾附加斜杠 bin 斜杠
python 如果你在 Windows
上 正斜杠你必须
使用反斜杠
好现在
在这个项目中我们有一个额外的
目录 vs 代码
我们有一个设置文件在这里我们有
一个python解释器的路径很好
我们可以转到视图菜单
现在看 我们有这个集成
终端 Mac 上的快捷方式
是 control 和 backtick
现在 vs 代码会自动激活
这个项目的虚拟环境，
所以在这里我们可以运行 python manage.pi
run server good 所以
接下来我将使用集成 指定的终端
窗口在这里更容易
我们总是可以通过按 ctrl 和反引号来隐藏它
或将其带回来我们可以最大化它来移动
它等等
现在一个快速提示有时在运行
此命令时
您可能会收到一个语法错误说
无效的语法
会发生这种情况 时不时地当 vs
code 无法
激活这个项目的虚拟环境
来解决这个问题时，
你所要做的
就是打开一个新的终端窗口，看看
vs code 执行了这个命令来
激活
这个项目的虚拟环境，
现在我们可以运行了
python manage.pi run server
很棒，嘿伙计们，我只是
想让你知道你
一直在看
的这个教程实际上是我终极 django 课程的第一个小时，
完整的课程大约是 10 个小时
，远远超出了本教程，
所以如果 你很认真地学习
django 并且正在寻找一份
后端
开发人员的工作我强烈建议你
参加该课程该课程
附带大量练习 ses 和解决方案
一个完整的电子商务项目，您
最终将部署到云中，
外加 30 天退款保证和
结业证书，
如果您有兴趣，可以添加您的简历，我会将
链接放在下面 如果不是，那完全没问题，
让我们继续下一
课
[音乐]
好吧，让我们谈谈应用程序，所以每个
django 项目
本质上都是各种应用程序的集合，
每个应用程序都提供
特定的功能，就像手机上的应用程序一样，
每个应用程序都提供特定的功能
django 项目的功能是
完全一样的，所以在这个项目中，
让我们打开店面目录
，然后查看我们的设置模块，
现在我们可以通过
在 Mac 上按 command 和 b
或在 windows 上按 ctrl 和 b 来折叠这个面板，现在在
这个模块中，我们 在本课中有一堆不同的
设置
，我们将
查看安装应用程序，
因此默认情况下每个 django 项目都
包含这些应用程序
，第一个应用程序是管理应用程序，它
提供 我们有一个用于管理数据的管理界面，
然后我们有用于验证用户身份的 auth
应用程序，
然后我们有
内容类型应用程序，我们
将在接下来的课程中讨论它
我们有会话应用程序，这是我们没有
的遗产” 不再
使用会话会话是服务器上的临时内存，
用于管理用户数据
这些天在使用 django 构建 apis 时
我们不使用会话应用程序
所以我们可以来这里删除这个应用程序
然后我们有使用的消息
应用程序 用于
向用户显示一次性通知
，最后我们有静态文件应用程序，
用于提供静态文件，如图像
css 文件等，因此每个应用程序都提供
了特定的功能，
现在我们也可以在这里创建我们自己的应用程序，
所以让我们保存 这个文件现在让我们
通过按下
control 和反引号来打开终端窗口 所以这是我们的
终端窗口，我们
正在运行我们的开发服务器 我们
将打开一个新的终端窗口
好的，现在让我们解释一下 为了清除
窗口，我们只需按
ctrl 和 l 现在我们将运行 python
manage.pi start app 我们将
调用此应用程序
游乐场 OK 所以
让我们现在关闭屏幕并
打开资源管理器
面板 看看这里是我们的新应用程序，
它使用具有特殊结构的文件夹表示，
因此每个 django 应用程序都具有完全相同的
结构
这里我们有用于生成数据库表的迁移文件夹
我们将
在课程后面讨论这个 我们有一个
完整的部分 这个主题
我们有管理模块，我们在其中定义
了这个应用程序的管理界面
接下来的样子我们有应用程序模块，我们在其中
配置了这个应用程序
所以这个名字有误导性我不知道
为什么 django 开发人员决定调用
这个 模块应用程序
，如果它被称为
配置那只是我的两美分，那就更好了
接下来我们有模型模块，我们
在其中定义了该应用程序的模型类
我们使用模型类
从数据库中提取数据并pr 发送给
用户
接下来我们有测试模块，我们在其中
编写单元测试
，最后我们有视图模块
，我们将在下一
课中
再次讨论该名称具有误导性这不是
您认为的视图，如果您来自
前端开发背景，
所以我们这里拥有的本质上是一个
请求处理程序，它不是一个视图，它
没有模板或 html 再次我们将
在下一课中讨论，
所以我们现在创建了一个新的应用程序，我们需要
在设置模块中注册此应用程序，
因此每次创建新应用程序时，
您都需要在已安装应用程序列表中注册它，
我们只需添加名为 Playground 的应用程序名称，
保存在下一课中所做的更改
开始讨论视图
[音乐]
好吧让我们讨论视图
之前你知道 http
是一个请求响应协议，所以每个
数据交换都
涉及一个请求和一个响应，这
是我们在 Django 中使用视图的地方，
所以在 Playground 文件夹中，让我们
打开视图模块，
这是我们定义视图或
视图函数
的地方 视图函数是一个
接受请求
并返回响应的函数，因此更
准确地说，
它是某些框架中的请求处理程序，
它
在 Django 中称为操作，它称为视图，
但是 我不同意这个名字，因为
从架构的角度来看，
视图通常与
用户
在 django 中看到的那个部分称为模板的东西相关联
，我们将在本节后面讨论这个，
现在先让我们创建 我们的第一个
视图函数，
所以我们要创建一个函数，我们
可以调用任何我们想要的函数
我要调用它 say hello
现在这个函数应该接受一个请求
对象并返回一个响应，
所以首先在 django.http 的顶部
我们现在将在这个函数中导入 http 响应
类
我们可以
在现实世界中做任何我们想做的事情 我们可以
从数据库中提取数据 我们可以
转换数据
我们可以发送电子邮件等等
让我们只返回
一个简单的响应，所以我们将返回
一个 http 响应类的实例
，在这个响应的这个对象中，你
想添加一个简单的字符串，
所以我们说 hello world 好吧
，这是我们的第一个视图或第一个视图
函数
现在我们需要将这个视图映射到一个 url，所以
当我们在那个 url 上收到一个请求时，
这个函数将被调用，这
就是我们接下来要做的
[音乐]
好吧，这是我们的 django 项目，现在
让我们说每当我们
发送请求时 到playground slash hello
我们的视图函数应该被调用并将
hello world返回给用户
让我们看看我们如何做到这一点所以回到
我们在playground文件夹中的项目，我们
将添加一个名为urls.pi的新文件，
你可以调用
名称无关紧要，
但按照惯例，我们现在
在此模块中将其称为 urls，我们将把我们的
url 映射到我们的视图函数，
因此在顶部，我们
将从 django.urls 导入路径函数，
因此从 django.urls 我们要
导入 p ath 函数
现在不用担心记住任何
这些，因为你练习
所有这些都将成为第二天性
从当前文件夹我们应该
导入 views 模块
以便我们可以引用我们的视图函数
现在我们应该定义
一个名为 url patterns 的特殊变量
所有小写确保正确拆分它
，因为这是 django
寻找的
我们应该将它设置为一个 url
模式对象数组
我们使用 path 函数创建一个 url
模式对象
所以如果我们调用这个函数看看
签名 这个函数
这个函数有一堆
参数第一个是路由
，它是一个字符串你
在这里看到的符号称为类型注释，这
是python中的一种新特性，
带有类型注释我们可以看到参数的类型
和返回值 一个函数，
所以第一个参数是路由，它是一个
字符串，第二个参数是视图，它是一个
返回
http 响应对象的函数，现在在这里查看
这个符号 表示
这个函数的返回类型，
所以路径函数返回一个 url
模式对象，
所以我将调用这个函数并
给它两个参数一个路由或一个 url
，它是操场斜线 hello 和
一个视图函数，所以从视图模块
我们
“再要获得问好请注意，我不调用这个函数所以这里我们没有对我们只是传递引用这个功能好了，所以我们在这里被称为URL的conf模块，括号 基本上意味着 url 配置，
所以每个应用程序
都可以有自己的 url 配置，但
现在我们需要将此 url
配置
导入到此项目的主 url 配置中，
您之前在哪里看到它，因此
回到我们拥有的店面文件夹中的资源管理器面板
另一个 url 的模块
在这里我们有一堆
关于我们应该如何使用这个模块的评论
现在看看这里 如果你想
包含另一个
url conf
首先我们需要做两件事我们需要导入 inclu de
函数
来自 django.urls 所以在这里我们有
来自 django.urls
我们要导入包含
函数接下来我们需要添加
一个 url 到 url patterns
所以在这个模块中我们还有一个 url
patterns 对象, 它是一个
数组 url 模式对象，所以在这里我们
将调用 path
给它一个路由，然后我们使用
include 函数
来引用
这个应用程序中的 url 配置模块，所以
我们将调用 path 并说出
任何以 playground 开头的 url，
然后是 一个正斜杠应该
路由到
我们的 playground 应用程序，所以这是我们
使用 include 函数的地方，
现在 include 函数需要
一个字符串参数，
这里我们将引用 playground
点 url，
所以如果我们将请求发送到 playground
slash hello django 知道
所有以 Playground 开头的请求
都应该由这个
应用程序处理，所以它会砍掉
这个 url 的第一部分
并将其余部分传递给
Playground 应用程序中的 url 配置模块，所以回到这个
u rl 的模块，
我们不再需要在此处添加操场，
因为我们
在主 url 配置模块中添加了一次，
所以我们只需添加 hello 后跟一个
正斜杠我忘了添加我们
总是以正斜杠结束我们的路线
所以让我们保存更改 现在，每当
我们更改代码时，
django Web 服务器都会自动恢复，
所以让我们打开终端窗口
确保我们没有任何好的箭头
所以回到浏览器让我们
向这个端点发送一个请求
很好我们在屏幕上看到 hello world
所以 这就是我们如何将
url 映射到视图函数接下来我们
将讨论模板
所以我告诉过你，django 中的
视图并不是真正的视图，它们更像是
请求处理程序或操作
，我们在其他框架中通常称之为视图
在 django 中调用了一个模板，
让我们看看如何使用模板
将 html 内容返回给客户端，
因此在 Playground 应用程序中，我们
将添加
一个名为 templates 的新文件
夹，我们将在该文件夹中添加 g 添加一个
名为 hello.html 的新文件
，当然我们可以将
其命名为任何名称
，在这里我们可以编写一些 html 标记
，例如我们可以键入
h1 并按 Tab 添加一个 h1 标题
并说 hello world 现在不要担心
你不知道 html 我们不会
在本课程中使用它
我只是想向你展示 django
模板是如何工作的，
所以让我们现在将更改保存回
我们的视图函数，
而不是返回一个简单的 http
响应
我们将要 使用 render
函数渲染模板并将
html 标记返回给客户端 所以让我们
删除这一行
并调用渲染函数 现在看看
这个函数的返回类型 它返回一个 http
响应对象
所以在这里我们将返回
响应
现在让我们去掉括号并
再次输入它们，这样我们就可以看到函数
签名
这里的第一个参数是一个请求
对象，它
的类型是 http 请求，
所以我们现在要在这里传递这个请求
对象
第二个参数
是 南 我们的模板的 e 是
一个字符串
所以在这里我要说
hello.html 其他参数是可选的所以
此时不要担心它们
现在保存更改让我们确保我们的
项目工作到这一点
所以回来 在浏览器中刷新漂亮
现在我们看到 html 内容我们可以
通过右键单击此页面并
查看页面源来验证它所以看起来
我们返回的
html 内容很棒现在让我们
让它更有趣
所以回到我们的模板而不是你好
世界
我们可以动态地呈现一些值所以
回到审查函数让我们输入一个
逗号
来查看下一个参数是一个
上下文对象
，这个类型是
字符串
到任何的映射，这意味着我们可以传递
任何映射字符串的映射对象 值到任何其他
类型的
对象，所以在这里我们可以传递一个字典，
所以让我们传递一个字典，
键的类型应该是一个字符串，所以我们可以
调用该名称
，我们将把它设置为一个值，
比如现在说 mosh
背部 到我们的模板
而不是 hello world 我们可以呈现
我们在此处传递的名称，
因此我们键入两对大括号，然后在
中间键入键的名称 save
refresh beautiful 现在在此模板中
我们还可以编写一些逻辑以便我们可以
键入 一个 if 语句，所以我们输入大括号
，在它们之间添加两个
百分号
，我们可以写一个 if
语句，这样我们就可以说
如果 name 设置了我们可以在这里渲染它，
否则
我们可以渲染 hello world
，当然我们需要一个 结束 if
子句也是如此
，如果现在这种语法有点难看，
但是 django 的好处是
它是模块化的，因此您可以轻松地将
django 的默认模板引擎替换为
您喜欢的模板引擎，但
我们再一次并没有真正使用模板
django
项目现在经常有一些
特殊情况，
但在大多数情况下，我们使用 django 来构建
返回数据
而不是 html 内容的 api，所以我只包含了这一
课，
所以你知道什么是模板以及如何
他们工作我们现在不会花
更多的时间在模板上，
除非我们遇到我们
真的需要它们的情况
[音乐]
让我们谈谈
在 vs 代码中调试 django 应用程序
这特别有用，如果我们的
应用程序不产生 正确的
结果，我们想一行一行地运行它
，看看
到底哪里出了问题，
所以当你第一次看到这条消息时，点击这个
图标打开运行和调试面板，
基本上我们应该创建一个launch.json文件 需要创建一个启动
配置文件，
以便 vs 代码知道如何运行或调试
此应用程序，
所以让我们现在在此列表中
单击它选择 django 好吧这里是我们的
launch.json 文件
你在这里看到的有点像
我们有的 Python 字典 一堆
键值对
这些键值对定义了一个启动
配置文件，
所以 vs 代码知道要运行这个
应用程序，
它应该使用当前的 python
解释器
来运行
我们工作区文件夹中存在的 manage.pi 然后作为一个
参数，
它应该在这里传递运行服务器，我们
可以添加
一个额外的参数来指定
端口，
这样它就不会与当前正在使用的端口 8000 发生冲突，
保存我们对这个文件所做的更改
，让我们 如果您好奇，请立即关闭它，
让我向您展示此文件的存在位置
它已添加到我们的项目中
的 vs 代码文件夹中 所以这是我们的启动
配置文件
现在我们有一个启动配置文件 如果我们
转到运行和调试面板
我们 看到别的东西，所以我们可以在这里
启动我们的应用程序进行调试，
但在此之前，我想
在我们的视图函数中编写一些虚拟代码，
所以让我们将 x 设置为 1，将
y 设置为 2。现在我要点击这一
行 当我们通过作用域添加断点时插入断点
将执行每一行
代码，直到
它从该点开始遇到我们的断点
我们可以逐行执行我们的代码所以
让我们添加一个断点然后
启动应用程序进行调试
好吧让我崩溃 这风
太好了，
所以在这个新的终端窗口中，我们有一个
开发服务器
侦听端口 9000，所以让我们
按住 Mac 上的命令键或
Windows 上的控制键，然后单击此
链接就可以了，这就是我们得到的
项目主页不见了，
因为 我们已经注册了一个自定义
路由，playground
hello 所以我们只在
第一次运行我们的 django 项目时看到主页
所以让我们去playground hello，
我们的断点被激活
，我们
现在在变量中的左侧
部分你可以看到局部变量，
所以目前我们有请求对象
，它是
我们在这个函数中接收的请求对象，所以我们可以
扩展它
并检查它的各种属性，
我们现在不想这样做，所以
让我们关闭它
想要逐行执行我们的代码，
所以这里我们有一堆
函数，第一个是单步执行，
快捷方式是 f10
用这个我们可以单步执行当前
行，所以如果我们按 f10
这个 li ne 被执行，现在我们
在第二行，
现在在我们有 x 的局部变量列表中查看这里
，它的值为 1 这
在调试应用程序时非常有用，
所以如果某些东西计算不
正确，我们现在可以在这里检查它
有时您可以在此处看到您的
局部变量，
但如果不是，您始终可以将它们添加
到观看窗口中，
因此在录制此视频之前，我正在
练习这就是您在此处看到 x 的原因，
让我选择它并将其删除，以便在
您的观看部分中将其删除 不会
有任何
变量添加一个我们只需单击它
然后输入
我们的变量的名称可以这样
我们就可以跨过
不同的行这样我们就可以一次又一次地按 f10
执行此函数然后
返回 在浏览器中
我们看到了最终结果 现在让我们做
一些更有趣的事情
所以回到我们的代码 让我们
关闭终端窗口 这样我们就有更多的
空间 我将在
这里定义一个称为计算的函数 在
这里我们将设置 x 到 1 y 到
2 并返回 x
只是一些虚拟代码现在在这里
我们将调用计算
函数好的
现在将更改保存在浏览器中
让我们刷新以便我们的视图函数被
捕获
现在我们现在就在这里
越过这条线，
我们想进入它，因为如果
你越过这条线，
我们不会看到计算函数中发生了什么，
我们会看到最终结果，所以我们看到 x
设置为 1，
我们可以验证 这里也是，但
有时我们需要进入一个
函数来
看看发生了什么可能
在calculate函数中有一个错误
所以让我们重新启动调试器
好吧我要在浏览器中关闭它
让我们刷新这个页面
好吧我们 现在回到这一行，
这次我们要进入这个
函数，
所以看看这里，这是
进入一个函数的图标
，你可以看到快捷键是 f11，
所以如果你按 f11
我们进入计算 函数现在
我们可以执行
使用 f10 测试每一行或单步执行，看看哪里
出了问题，
现在让我们想象一下这个计算
函数是一个有很多代码的大函数，
在某些时候我们想退出它
而不必执行这里的
每一行代码 函数
有一个快捷方式
，所以看看这里
的快捷方式是 shift 和 f11
所以如果我们按下 shift 和 f11 我们
回到上一个函数所以这是
我们现在可以在 vs 代码中调试 django 应用程序的方式，
一旦我们' 重新完成删除这些断点总是一个好
习惯，否则
它们会
妨碍您在调试应用程序时
将各种断点放置在
代码的不同部分，
并且您将一直点击它们，因此
一旦您总是删除断点 完成它们，所以我们完成
了这个调试会话，
现在我们可以通过按 shift 和 f5 断开连接，
或者现在点击这个图标，
在我们完成本课之前的最后一个提示
菜单看起来
我们有一个名为 run 的命令，无需
调试
mac 上的快捷方式是 control 和 f5 所以
如果我们使用这个快捷方式，我们可以启动我们的
应用程序
而无需运行 python manage.pi
run server 让我告诉你我的意思
所以
首先让我们带来 在我们的终端窗口上
这是我们用于调试的第二个终端窗口
我要删除这是
我们通过运行 python manage.pi run server 启动我们的应用程序的第一个终端窗口
所以让我们按 ctrl 和
c 停止服务器良好 我
还要删除这个终端窗口
让我们想象一下我们刚刚
在第一天在 vs code 中打开这个项目
来运行这个应用
程序我们可以按
ctrl 和 f5
现在我们的应用程序已经在端口 9000 上启动
所以我们可以转到这个地址 然后
点击 Playground hello
这样我们就可以在
不调试的情况下运行我们的应用程序
请记住，如果您使用此
命令，您的断点将
不会被击中，
所以如果您想调试您 r
应用程序，您应该
在调试模式下启动它
[音乐]
还有另一种方法可以
使用称为 django 调试工具栏的强大工具来调试 django 应用程序，
因此如果您去
谷歌
搜索 django 调试工具栏，您
将找到此
页面 在这里你会找到
安装说明，
所以我强烈建议你
跟我一起重复相同的步骤，
所以我们一起安装了这个工具栏，所以
首先我们必须使用 pip 或 ppf 来
安装
django 调试工具栏，所以回到 vs 代码
我将打开一个新的终端
窗口
，正如你所看到的，vs 代码使用
源命令来激活我们的虚拟
环境，
所以现在让我们运行 pipen install
django dash debug dash toolbar
good now back to the
documentation 下一步是添加 在我们的设置模块
中安装的应用程序列表中的调试工具栏
所以回到 vs
代码
我们可以在 Mac 上按 command 和 p 或
在 windows 上按 control 和 p
来调出搜索框，现在我们
搜索我们的 settin gs
模块现在在最后的安装应用程序列表中很好
我们将添加调试下划线
工具栏
现在很好
下一步下一步是
在我们的主 url conf 模块中添加一个新的 url 模式
所以我要复制 这一行并
回到 vs 代码让我们调出 urls
模块
我们将在
店面文件夹中选择一个
好的 现在我们在此处添加一个逗号并粘贴
该行
现在我们有一个编译错误
因为调试工具栏是一个模块
我们必须在顶部导入，
所以如果你查看文档，你
可以看到这里
导入调试工具栏所以复制它并
粘贴在这里
好现在回到
文档下一步是添加一个我们
使用中间件挂钩的中间件 进入 django 的
请求响应处理，
所以在我们的设置模块中，我们有一个
中间件设置，
我们将在该文件中添加这一行，
因此将其复制
回设置模块，然后我们立即
安装
应用程序，您可以看到
中间件设置
所以我们要把它添加到顶部，
现在最后一步是在内部 ips 设置中添加我们的 ip
地址
，所以对于本地
开发，
我们应该使用 127.001，
所以我要复制整个设置，
因为默认情况下
这不会' t 存在于一个新的 django
项目中，所以复制它
，我将把它粘贴到
这个设置文件中的任何地方，这并不
重要，
可以保存，所以
如果你去这个 url 游乐场，我们现在已经在浏览器中完成了所有步骤
斜线你好，我们没有看到它
应该出现在这里
的工具栏，因为工具栏只有在我们
返回正确的 html 文档时才会出现，
如果您右键单击此处并查看
页面源，
您可以看到我们没有返回
正确的 html 文档，
所以我们 没有 html head 和 body
元素，
所以让我们现在在顶部打开 hello.html
我们
在这些元素中输入 html press tab 现在
我们要添加
一个 body 然后在 body
我们要添加 我们之前的代码，
所以让我们向右移动 这里
很好，现在我们有了一个合适的 html 文档
，当然 head 元素丢失了，
但
现在回到浏览器刷新并不重要，
这里是 django 调试工具栏
，我们有不同的面板，如
历史记录，用于查看我们到目前为止点击的 url
我们有版本可以看到我们正在运行的
django python 和
调试工具栏的版本 我们有
处理时间
我们有我们的设置 我们有请求
标头等等
现在我个人最喜欢的面板是
sql 或
sql 面板在这里我们可以看到
查询 被发送到数据库，所以稍后
在我们讨论
使用 django 的
对象关系映射器查询数据库的课程中，我们将
回到这个面板，看看
django 将生成什么查询并将其
发送到
数据库，这就是本课的内容 我们
在下一节中完成了这一节，
我们将讨论
构建数据模型，所以我会在下一节中见到你
欢迎回到
Django 终极课程的另一节
在本节中，我们将
讨论用于存储和
检索数据的模型，
我们将从快速介绍
数据建模开始，以确保您了解
基本概念，
然后我们将设计数据
模型 一个电子商务应用程序
接下来我们将讨论
在应用程序中组织我们的模型以提高
可重用性
这是经常被误解的领域之一，
所以我将彻底揭开它的神秘面纱
，然后我们将花掉剩下的时间
在编码模型类的本节中，
我们将在整个课程中使用这些类来存储和
检索数据，
所以让我们进入并开始
[音乐]
每个 django 项目的第一步
是找出我们想要存储的数据片段
对于初学者来说，我们在电子商务应用程序中有哪些实体或概念，我们需要
具有标题
描述价格和库存等属性的产品概念，现在在
实际场景中
，产品实体可能具有其他
属性 真的取决于
我们的应用程序的要求，
现在我们只是想让事情
简单化，现在
我们的产品经常被划分为不同的
类别，例如鞋类
美容产品水果等等，所以我们
需要另一个名为集合或
类别的实体，其属性称为标题
现在我们需要
在这些实体之间添加关系或关联，
这样我们就可以从一端开始
导航到另一端
，例如我们可以获得一个集合并
找到该集合中的所有产品
现在让我们假设在我们的
应用程序中
产品可以属于一个且仅一个
系列
，一个系列可以有多个
产品，
因此星号代表许多我们
也可以在
这里使用 n 好的，现在我们
在系列和产品之间建立了一对多关系，因此
关系可以是一对多的 -
一对多和太多太多回到
我们的图表
现在在这里我们可以添加一个名为产品的标签
，这意味着
当我们对这些实体进行编码或
集合类中的这些类我们现在
将有一个
名为 products 的属性
为了简单起见我只想隐藏它
现在有时我们可以在两个实体之间有多个
关系或
多个关联
所以让我们想象一个
集合
可以选择有一个 特色产品
，即
我们想要向用户展示其图片的产品，
因此我们可以在这些实体之间添加第二个关系
，
现在看看这个
数字，零到一意味着
一个集合可以有零到一个
产品
，我们将称之为 属性
特色产品 所以
这意味着在集合类中我们
将有一个
名为特色产品的属性 好的，现在您
可能会
问 id 属性怎么样 不应该
每个实体都具有 id
属性是的，但是 django 将
自动创建 这对我们来说
这就是为什么我现在没有在这里展示 一个
小练习
让你抓起一张纸并
确定
我们需要的其他基本实体 在
电子商务应用程序中编辑
只是最低限度 不要继续
创建像这样的复杂图表
我不希望
这样 我希望您识别的只有五个实体
所以花几分钟并识别
这些实体 有了属性
和
关系，然后回来看看我的
解决方案
，这就是我们
在上一课中得到的结果，我们
在集合和产品之间建立了一对多的关系，现在
不要将此作为硬性规定
也许在您的应用程序中，一个产品可以
属于多个集合，
那么您将
在产品和集合之间建立多对多的关系，
所以回到我们的模型，我
将从这里删除集合，
以便我们有一些可用空间 现在屏幕
我们在每个电子商务应用程序中
还需要什么 我们有购物车的概念，
所以我们将拥有一个实体
或模型或一个名为
cart 的类，其属性名为 created at
let's 假设我们需要知道
每张卡片的创建
时间，所以我们可以不时地进行
清理并删除 30 天前的卡片
我只是编造了这个，但在实际
情况中，您应该始终
根据要求设计模型 你的
项目不要制定你自己的规则
现在我们需要一个关系或
产品和卡片之间的关联，
因为一张卡片可以有多个
产品，一个产品可能在
不同的卡片中，
所以这里我们有一个多对多的
关系 产品
和购物车之间现在有时
两个实体之间的关系可以具有
属性，例如，如果产品
在购物车中，
我们需要知道
我们在购物车中有多少该产品的实例，
因此这种关系本身应该具有
称为数量的属性
所以我们将在此处添加一个
名为
购物车项目的新实体现在看看我
用来表示这个概念的符号
我已经使用虚线将购物车项目连接到
关系
这意味着购物车项目代表
这两个实体
产品和购物车之间的关系这就是我们所说的
关联类
所以购物车项目是一个关联类
现在有另一种方式来显示这一点
而不是使用关联类我们
可以在购物车之间添加关系
和购物车项目，因为一个购物车可能
包含
多个项目，而一个项目属于
一个且只有一个购物车，
类似地，我们可以添加
产品和卡片项目之间的关系，因为
每个卡片项目代表
一个产品，并且一个产品可能被
许多卡片项目引用，所以 这里我们
在这些实体之间有两个一多关系
现在将其与关联类表示法进行比较，
因此我们可以添加
与关联类的多对多关系
或两个一对多关系，这
是个人喜好的问题
所以我们已经完成了购物车，但
您可能会问
拥有此购物车的用户或客户
的情况如何？ iagram 好吧，我
还没有将购物车与客户这样的实体联系
起来，
因为我们不想强迫
人们在
将产品添加到
购物车之前进行注册和登录，所以
卡和客户之间没有关系，
所以汽车本质上是 匿名 任何人都
可以拥有购物车，
无论他们是匿名用户还是
注册客户 好的，
所以我们已经完成了购物车 现在让我们
谈谈客户，
这样我们的客户实体可以拥有
诸如姓名
电子邮件用户名密码等属性，
为了简单起见，
我现在 现在只在这里显示姓名和电子邮件，
一个客户可以有
多个订单，每个订单属于
一个且
只有一个客户，所以我们现在再次需要客户和订单
之间的一对多关系
订单实体现在可能
有多个
属性 只是想知道这个订单是什么时候下的，
现在一个订单可以包含多个
产品，一个产品可以在
多个订单中，
所以我们之间存在多对多关系
n 订单和产品
，与购物车示例类似，
这种关系本身需要
属性，
因此这里我们需要另一个名为
order item 的实体，其属性名为
数量，这是我们的关联类，
或者
您可以在 order 和 order item 之间添加关系，
因为每个订单可能包含 多个
项目，每个订单项目
属于一个且仅一个订单，
类似地，订单项目引用一个
且仅一个产品，
而给定的产品可能
被多个
订单项目引用，因此有两个一对多
关系，
所以这些是我想要的实体
你来识别但为了让这个项目
更有趣
我决定在这里再添加一个实体
标签
我们在产品和标签之间有一个分钟对多的
关系，
因为产品可以有很多标签
，标签可能会被
我们不同的产品引用 将
在下一课
[音乐] 中回到这个实体
所以我告诉过你一个 django 项目
包含一个或多个应用程序
s 就像手机上的
应用程序一样，django 项目中的每个应用程序都提供
了一个特定的功能，
这意味着
每个应用程序都将拥有自己的数据
模型，因此在本课中，我们将
研究几种不同的方法
在不同的应用程序中组织我们的实体
一种方法是拥有一个名为 store 的应用程序
并将我们所有的实体放在此处，现在我们
可以通过 pip 捆绑和分发这个应用程序
，这样任何人都可以
在他们的项目中安装这个应用程序
并获得所有这些模型 以及
它们周围的功能，
所以下次我们从事
电子商务项目时，我们不必
一遍又一遍地重写相同的功能，我们只需
在我们的项目中安装这个应用程序
并编写额外的代码进行自定义，
但这里有一个问题，因为 这个
应用程序会
变得越来越复杂，它会因为太多的东西而变得臃肿，
比如太多的模型、太多的视图和
其他东西，
这就是我们所说的像一块又
大又重的石头的整体，
所以在某些时候 oint 我们的应用程序可能
变得
难以理解 难以维护且难以重用 它
变得像那些
带有太多按钮的遥控器之一
在设计这些应用程序时我们希望
遵循 unix 哲学，
因此每个应用程序都应该做一件事并且
做得好 这是另一种解决方案，我们可以将
这个项目分解为四个小应用程序
产品应用程序代表
产品目录
所以这里我们将拥有三个实体
产品集合
和标签然后我们将拥有
客户应用程序来
管理我们的客户 将拥有
用于添加购物车
功能的购物车应用程序和用于添加订购功能的订单应用程序
还不错，
这实际上是
分解该项目的一种糟糕方式，出于
多种原因，请
查看它们之间的耦合或依赖
关系 应用程序
订单应用程序依赖于
购物车应用程序，而购物车应用程序又依赖
于产品应用程序，
所以下次我们从事
电子商务项目时 我们必须首先安装
所有这些应用程序我们必须
先安装产品应用程序
然后是购物车应用程序
客户应用程序和订单应用程序
理想情况下每个应用程序都应该是
独立的，因此我们可以轻松地将其
放入 新项目的另一个问题是
，如果我们发布新版本的
产品应用
程序，这可能会导致购物车发生重大变化
并
随后订购应用程序，因此使用这些应用程序的任何人
都必须再次将
所有这些应用程序一起升级，它也会越来越
多地工作
在没有
产品目录的情况下拥有购物车功能真的没有意义
为什么我们要在没有产品目录
的项目中添加购物车功能
所以购物
车功能和产品目录
总是以相同的方式结合在一起
为什么我们要在无法
下订单的情况下将购物车功能添加到项目中，
只是为了让人们在
购物中添加一些东西 购物车
然后又是什么它真的没有
意义所以这些概念是高度
相关的，
如果我们将它们分开，应该将它们捆绑在一起，我们增加
了应用程序之间的耦合，我们最终会
遇到我刚刚谈到的问题，
所以这是否意味着我们必须去
回到整体设计
没有中间立场
看看标签实体
标记产品的能力是可选的
我们不一定在每个
电子商务应用程序
中都需要它 事实上我们可能在其他类型
的应用程序中需要它，例如您的 博客
或视频平台等等，所以标记
不是特定于产品或
电子商务应用程序，
它是一个单独的功能，
所以我要将标记实体移动到一个
名为标签的单独应用程序
，在这里我们将有
另一个名为
标记项目的实体，它表示被标记的项目
它可以是产品、文章、视频
等等，
现在有了这种
分离，
每个应用程序都是独立的，并提供
特定的饼图 ce 的功能，
因此我们可以根据我们将要构建的内容在新项目中使用它们中的一个或两个，而且
我们在这些应用程序之间实现零耦合，
因此我们可以独立更改和
部署它们而不会影响其他应用程序
这是正确的方法 把
这个项目分解成多个应用程序
所以如果我们的应用程序
边界如此之大，
我们最终会得到一个庞大的单体，
如果我们的应用程序
边界如此之小和细粒度，
我们最终会变得臃肿且难以重用。 ' 最终它们之间会有很多耦合
一个好的设计是具有
最小耦合
和高内聚意味着高度关注的，因此
每个应用程序都专注于一个特定
的功能，并
包括实现该功能所需的一切
，
所以回到 vs code 我们将
创建两个新应用程序，
所以我们运行 python manage.pi
start app 第一个应用程序是商店
，第二个是标签，
现在可以了，就像我之前每次创建新应用程序时告诉你的
那样 我应该将它添加到
已安装的应用程序列表中，所以
让我们关闭此窗口并转到我们的
设置模块，
这是安装应用程序的列表，我
将在此处添加这些应用程序
，因此存储和标记
一切正常，我们已完成此步骤
从下一课开始，
我们将为这些应用程序创建模型类
嘿伙计们，我只是想让
你知道你
一直在看的这个教程
实际上是我的终极 django 课程的第一个小时，
完整的课程是关于 10 小时
，远远超出本教程，
所以如果你认真学习
django 并且正在寻找
后端开发人员的工作，我强烈建议
你参加该课程，
该课程包含大量练习
和解决方案
- 您
最终将部署到云端的商务项目，
外加 30 天退款保证和
结业证书，
如果您有兴趣，可以添加简历，我会将
链接放在下面，感谢您的
观看 我希望在课程中见到你