嘿，欢迎来到尝试django系列[音乐]
我的目标是帮助您像我想要的那样学习和掌握django
尽你所能去了解django网站
您在我们将要执行的方式中看到的框架实际上是从
首先我们要从绝对基础开始，然后我们要
努力沿途引入新概念，而我实际上并没有参加
建立一个完整的项目，所以我要做的就是跳进去
各个概念将它们放入某种项目的实际用例中
然后最终您将对如何构建真实的建筑有一个很好的了解
使用Django的Web应用程序，当然我建议您学习
来自整个项目，我在YouTube上都拥有很多
加入CF EECOM斜杠youtube以及在我们的网站上加入CF e-comm，我们有一个
用django构建真实事物产生大量的东西，但是这个系列是
所有关于将绝对基础知识甚至是高级知识一点一点地进行的事情
如果您是第一次学习Django，那将是非常令人兴奋的
经历至少是对我来说，因为一旦我能够
构建一个Web应用程序，并且您知道数据库已连接到数据库，就像哦
现在好酷，我想你可能会同样兴奋，也许
您已经使用其他Web应用程序完成了此操作，或者也许是
第一次使用任何一种方式进行编程时，最令人沮丧的部分是
开始不是因为编程语言，而是因为
如何实际设置您的系统，因为多年来如此令人沮丧
我们将根据您所处的环境找到建立系统的方法，
那就是无奈的一部分，就像你要看到我在
Mac，Mac OS环境，如果您使用的是Windows，那为什么不呢？
同样，我的意思是实际使用Python和实际使用Django是相同的
这两个系统都是因为python是Python，而Django是Django，因此要获取的命令
可能会略有不同，但实际上在过去是一样的
几年来，我们改进了安装过程，所有这些都可以在
从零加入CFE逗号斜杠，因此，如果您只是执行该步骤，那么请先进行设置
过程中，您将准备好进行本系列的其余部分，而不必继续进行下去
除了在跳到那里之前设置系统以外的其他步骤，我做了
想提及另一件事，那就是代码，因此我们拥有所有代码
在github上或加入CFE coms斜杠github进行快捷方式，您将寻找
尝试使用Django存储库，因此加入C feed comm斜杠github，我们将带您到这里
然后，如果您进入存储库，就会看到各种各样的存储库，实际上
如果您输入尝试Django，那么您也会在其中看到多个，我也希望您
忽略所有带有数字的数字，然后尝试一次
Django，所以如果您想直接去那里，那么这里是一个链接
但是这段代码会100％地为您提供帮助，因为当您点击roblox时，您将会
想做的就是获取您一直在编写的代码，然后看看github
确保您编写的内容与我们所做的相同
至关重要的视频，最后是有疑问的时候
查阅文档Django的文档非常
写得很好，那里有太多东西，您可以了解到我们不会
必然涵盖，因为它们提供了更多的上下文，或者它们给出了
技术的具体用例的细节，然后是最后一个
事情是Google是您的朋友，您知道您可以使用Google进行搜索
您不熟悉的东西，通常会带来Stack
溢出的.com堆栈溢出问题是所有人都面临的所有这些问题
各种编程语言，包括Python（包括Django）在内
JavaScript里面有各种各样的东西，您只需快速搜索就可以
只需搜索Django，您就可以从中学到很多东西
像投票一样，我的意思是Django扩展规模是否是一个有趣的问题，
看看然后什么是null什么是空白
我的意思是，这里也是很好的学习资源，所以我
假设下一个视频以及其他所有未来的视频是您拥有
您的系统已设置好并可以与Django和Python一起使用，
我们将要使用的将在下一个中讨论，因为它们
会随着时间的流逝而变化，我真的希望您能坚持
视频中的任何版本，因为对于初学者而言，至关重要
好的，所以在这一点上，我们将创建一个全新的虚拟
环境并安装jingo，如果您之前没有做过这些事情
不管版本是什么，现在都一定要停止，并确保您返回并
现在进行设置过程，我绝对希望您有一个全新的虚拟机
环境和全新的Django安装不仅是为了实践
而且还要确保我们都从完全相同的位置开始，所以如果
您打开终端窗口，或者如果您在Windows上的电源外壳或
命令提示符，但希望您在Windows Linux上使用PowerShell恐惧
和Mac用户区终端很好，所以如果我们输入python v和python 3
-V这就是我现在得到的，您可能已经在其中安装了Python 3，因此如果您
在这里看到Python 3点6点5或3点6点6
如果您看到此状态，则身体状况良好，那么您将不得不多做一些
好吧，请记住我要离开
打开，我要把它放到一边一点，把它弄碎
下来，这样我们就可以牢记这一点，好吧，所以我
现在打开另一个终端窗口，您绝对不必这样做，但是我
要留在这里，以防万一，我们有几种不同的方式
可以创建一个虚拟环境并安装Django，我将向您展示
我要去做的方式，所以我会告诉你最后的方式，如果那部分
对您有用，您可以转到将要安装的下一部分
Django，也许我们一开始应该做所有这些，所以我要告诉你
到底我现在该怎么做，我首先要保持这个虚拟
一个开发区域中的环境，所以对我来说，当我打开它并列出
我看到的这一切可能与您的有所不同
您的文件夹可能是相同的，如果您看不到它，那么您可能会看到此dev文件夹
确实使他们的开发正确，所以就我而言，已经在那儿了，所以我明白了
错误，我将CD插入我的父亲文件夹，好的，这是我保留所有内容的地方
我的开发项目，所以在这里，我将继续进行编目
叫做try Django，我们将CD放入该目录，然后创建
现在我们的虚拟环境在创建之前
只是要打虚拟NV并确保我没有看到任何错误，所以我看到了
如果我输入ABC，我可以做各种各样的选择，所以有一个错误，如果
您看到一个错误，这意味着您需要安装所有虚拟环境
再来一次，所以我清除了所有内容，但是如果
我做PWD，如果我列出，我会确切地知道我在那个文件夹中的位置
外面什么都没有了现在我要做的几乎就是B
-P Python 3现在再次进入，请​​记住我说过的话，如果您使用Python-V和
Python 3在这里，您可以在这里省略此部分
因此，如果您在此处看到python 3.6，则可以忽略该部分，而只需保留它即可
作为虚拟的时期，我们按回车键来创建一个虚拟环境
在此目录中，这样我就可以使用源bin斜杠激活它
激活然后安装django，所以pip安装了django和我的版本
django将是两点零点七，所以django等于等于2
点零点七，如果您是
坚持使用我的那个版本的叮当我真的不在乎
如果两个八点是两个零点，那么八个八点就消失了，请使用两个零点
第七点将在以后进行升级，如果您坚持执行此操作，
一定会和我们一起升级，我保证会保证，所以我
按下回车键，我将立即在Windows上为您运行
激活您可能会记得它有所不同，只是略有不同
所有安装的东西，我都会继续进行下去，然后分解一点，我就是
将打开另一个终端窗口并模拟重新激活该虚拟窗口
环境，所以我要将CD中的所有内容都列出到dev中，然后再查看
尝试使用Django，我又回到了虚拟环境中，所以我可以做源Bane
在Windows环境中的Mac环境中，斜线激活当然是脚本
我们激活任何东西，您也可以运行停用好吧，所以停用就结束了
虚拟环境很酷，那么拥有虚拟环境的目的是什么
环境，如果您已经知道的话，它就像
做点炸薯条，您会看到所有这些东西，我看到Django一分十分四分
我激活它进行斜线弯曲激活，然后点炸薯条，我看到的只是Django 2.0
第七点和PYT Z，以便将这些要求分开并在出现时
到Python及其类似Django的项目时，您要绝对确保
这样就可以了，所以如果这部分完成了，我们就已经安装了所有东西
您准备好出发了，可以继续进行下一个
如果您遇到一些问题，或者想查看启动虚拟服务器的其他方法
环境坚持我，所以请注意，显然我们拥有了所有这些东西
安装了所有正在工作的东西，所以继续前进只是注意
图解目的，您知道到目前为止，如果您
有它的工作，然后如果您没有它就完成了，请继续看下
倒带，然后安装您要安装的东西
需要安装，因为我要走得很快，但仍然要解释什么
一切正常，所以我要关闭所有终端窗口，然后像
我从零开始，所以我跳到终端窗口，进入
继续制作一个名为dev的新dev文件夹-我将CD放入
开发人员-并列出所有内容，所以我只是要向您展示
创建虚拟环境的三种不同方式
只需虚拟输入B，然后输入您想给它的名称，这样Vee
和V就是现在要做的一种方法，这与Python版本无关
不管系统的默认版本是什么，所以我输入
我的情况是2.7版，但这是现在启动虚拟环境的一种方式
如果我想基于特定版本的Python启动它，我会做
虚拟环境V和V-P Python 3哦，我们称其为VE和B-这给出了
我使用的是Python版本和此Python 3版本，因此假设如果我键入
Python 3实际上给了我Python 3，但是如果您输入Python 3，
不起作用，这将不起作用，所以发生了什么然后我可以做到
Python 3或换句话说，找到安装Python 3的位置
对，因此如果Python 3无法正常工作，哪个Python 3将无法正常工作，因此每个
偶尔将Python安装到系统中
在其他地方，此命令本身不起作用，但无论在哪里
实际安装在任何系统上，然后执行以下操作
粘贴到该路径，然后按Enter键，实际上应该可以打开Python 3
对您而言，那么这意味着实际启动虚拟虚拟机的最终方法
环境是虚拟环境，B 3破折号P，然后是该Python的路径
3我按下Enter键，然后实际上也将启动该虚拟环境
现在我要提到的另一件事是，我们可以仅创建所需的目录
这样称呼，我想打造一个虚拟环境和全新的环境
目录这是我继续并按Enter
我将其装入CD，然后可以进行虚拟环境处理，然后使用句号代替名称
然后我可能想要正确的任何版本的Python，所以这些命令的顺序
与我相比，如何运行这些命令并不重要
我之前所做的事情，但这是如何创建广告素材的几种不同方式
就我而言，现在是虚拟环境，我将继续前进并摆脱
该dev 2文件夹我真的不需要它，但这全都与插图有关
为了使所有这些东西一切正常，所以我将CD放回到我的
原始项目，然后继续进行下去，现在，如果其中任何一项是
令人困惑，您迷失了重新观看视频并多次执行此操作的原因，因为
对开始安装新项目有基本的了解
如果您只是来这里学习一些基础知识，那么可能会经常这样做
Django，您不打算使用Django进行很多项目
也许现在不需要这样做了，我再说一遍，也许是
你就像嘿，我不在乎虚拟环境，我不在乎
做好所有这些事情需要您自担风险，所以
如果您不使用虚拟环境，将会遇到问题，是的
我不使用Conda anaconda是一个更适合类似数据的软件包
与科学相关的事情Jango可以在我的系统中使用很多相同的软件包
体验anaconda和Jango效果不佳，但如果您
使用anaconda，您可能已经熟悉该系统，并且您正在
可能不会使用虚拟环境
但是我会保留整个系列，我建议他们使用
虚拟环境只是为了适应它，只是习惯于如何使用网络
开发人员经常使用Jango的开发环境
现在是时候创建Django项目了，看看我有全新的干净终端
窗口打开，因为我想养成知道如何重新激活的习惯
虚拟环境，所以我进入这里，然后将CD放入我所在的dev文件夹中
将CD上的所有内容保存到我的try Django文件夹中，
环境根是，而我运行得很好，不，我不通过虚拟方式和通过
命令了，我们继续运行源bin斜杠
激活权限，以便Linux和Mac用户适合您Windows用户
脚本斜线激活就可以了，所以如果你在这里，你可以继续并做点子
冻结，您可能会看到此版本的Django
我们使用的是我建议您同时使用的版本，所以我
只是将开口留在这里，这样我们就可以随时看到它
只是一个很好的小提醒嘿，这就是我要使用的Django版本
现在，让我们继续进行下去，这很容易，对吧
希望这不是真的那么容易，真的很容易，
我要快一点，也许只是放慢一点，我知道我讲得真快
但我设法做到这一点，以便初学者可以跟上，而且高级用户也喜欢
更高级的Web开发人员，他们正在学习Django，因此所有人
从中得到一些真正的目标是
雄心勃勃，但无论如何都可以，所以现在我们处于这个虚拟环境中
我有这个命令Django-admin，所以Django-admin是一个命令
允许我们用Django做各种各样的事情，但主要的是创建我们的
Django项目，因此Django-和Men一起创建项目，无论我们做什么
项目名称将是现在，您可以立即执行此操作
虚拟环境，但我想做的是创建一个SRC文件夹，如下所示
项目的源文件夹，然后我进入那里，所以如果我去
回到我的虚拟环境中，我看到这里有这些东西
对，所以我已经获得了与虚拟有关的支持
环境，我有我的SRC文件夹，所以我更改为
该SRC文件夹，然后执行Django-男人开始项目，然后是我的项目
命名我将如何称呼它，使其成为原创，我将其命名为Django
那也是我的虚拟环境的名字，我意识到，但是
没关系，您可以命名您的虚拟环境和Django项目，
相同，因为虚拟环境仅适用于您的系统
你自己将在其他地方，所以就像你在github上一样
与我们的虚拟环境有关的任何东西，所以我要开始
项目尝试Django，我将在句号结尾，因为我在其中
我按Enter的SRC文件夹会列出所有东西，我看到它们成功地粘贴了
尝试使用名称已知的Django配置文件夹尝试Django，因为
那是Django配置的名称，如果我运行Python
设法启动或原谅我运行服务器我应该看到的是在说
是这样的，它给了我一些警告，
不必担心，但是它给了我一个我可以的网址
如果我打开网络浏览器并转到那里，嘿，恭喜您
如果您不熟悉Django 2.0，并且现在是新功能，则Django现在可以工作
对您来说，这是他们创建的一个新的着陆页，看起来更干净了
肯定比旧的要好得多
所以我们现在有Django在工作，它已经准备就绪，可以进行各种各样的事情
我们可以使用它，但是在我真正跳入Django本身之前，我
我想做的就是开始在某种地方可以使用某种文本编辑器
编写不一定在终端内部的代码，因为这样可以
特别是对于初学者而言，它非常繁琐，
在终端内部编写代码，所以我们将做一些不同的事情
下一个我们将要讨论的，所以请留在我们身边
在这一本书中，我们将下载一个代码文本编辑器，因此编写我们的代码是
不仅仅是将所有命令键入到
终端或PowerShell正确，所以我们将使用崇高的文字，但另一个
一个又一个流行的叫做PyCharm或py charm我是如此崇高的文字
是100％免费下载和使用的，如果您真的喜欢它，则可以继续
买它，我与这两个都不隶属，我只知道他们俩
编写代码的非常受欢迎的选择，如果这就是您的全部，
在这里做的是，您只是在写出他们确实拥有的这些东西的代码
一些使它们更加用户友好的功能，但我不是真的
现在就进入该内容，我要说的就是继续下载该内容并
启动并运行它，一旦打开它，您将会看到一些东西
像这样的权利，因此您可以打开窗口，使侧边栏处于打开状态
然后您会看到一些空白页面，因此我们真正需要做的就是添加
将我们的项目放入其中，您只需进入项目添加文件夹即可
项目，然后我们想导航到我的项目现在所在的任何地方
转到硬盘用户我的用户dev文件夹，因为那是
终端默认打开，就在这里，然后尝试Django，我要去
向前并打开它会在这里带来各种各样的东西
在虚拟环境相关的东西，它也带来了我的SRC文件夹
让我管理两个pi和与Django相关的各种事情，所以这样
是使用文本编辑器的优势之一，就是它确实使
整洁且易于查看任何给定代码的状态，它还提供了
您这些数字或这些代码行正确无误，所以我可以说，嘿，看看第十行
而且您已经可以进入吊杆线十行了，好酷，那是另一回事
使用代码编辑器的方面，我的意思是有很多东西
我现在不打算讲，因为我可以花大约一个小时
只是经历了升华文字的设置过程，可能不会花那么长时间，但是
无论如何，所以我们现在在这里有这个文件夹
我们已经准备好使用这个项目了，但是我想做的就是
将项目保存在此处的崇高文本中，然后将其保存为Django即可
这个工作空间是我们测试中的额外内容，所以请不要担心
关于我保存在这里，我有我的崇高项目，当然，如果你
关闭崇高的文本，您就在项目本身中，并且您拥有
像您这样的东西嘿，我正在导航回到原来的位置
你知道你可以双击它，希望它将打开崇高的面纱
如果不是，那么您就知道要做的事情就是得到
信息，然后说确定您已打开并知道以下内容的精彩内容：
如果您使用的是Windows，请在其上单击鼠标右键，然后执行相同的操作
您只想确保它打开的那种东西，但是很好
问题是，它恰好切入了我所有代码的位置，因此我可以打开
整理我需要的所有不同文件，并对它们进行编辑和更改
崇高的文字真的很酷，真的很喜欢他们，我希望他们会赞助这些
他们不喜欢的视频，但我真的很喜欢他们的产品，所以请查看并
下载它，因为我们将大量使用它，但这不是必需的
强烈建议下一个见
让我们来谈谈设置。这绝对是您要结束的基本事情
使用很多东西对您的项目有很多影响
因此，我们将逐行介绍这里发生的事情，当然，您
可以阅读更多有关文档的信息，因为
场景，而不是我们首先要提到的场景，我们当然要导入
操作系统，因为Jango可在任何给定的操作系统Windows Mac和Linux上运行
你们所有人都可以看到完全一样的事情，如果您已经完成了我们对此所做的工作
点，所以您看到我们导入了OS，然后我们有了这个变量名base dur
设置为此长长的字符串，这是所有要做的事情，是
为我们提供了管理位置较高的路径，但更具体地说是文件夹
保持高管理状态，在我们的情况下是SRC，所以就是那个文件夹
就在那里，所以我怎么知道这很好我知道Python我知道Django
好吧，但是如何确定该目录在哪里，就在这里
所以就我而言，baster只是为您提供了这样的权利，因此您的用户可能会有所不同
如果您使用的是Windows，则肯定会有所不同
处于不同的方向，所以这里的好处是我们知道Django知道
这是系统中重要的部分，所以我们可以做一些事情
相对于整个项目内部的Django来说，这很酷
巴斯特告诉我们，从一开始就可以知道，您可以打印
如果您愿意的话，也可以知道它是什么，您可以将其打印出来，然后
只是再次运行服务器，让我们继续运行该服务器，该怎么办
您知道它实际上为我们打印了该目录，就像我一样
说那就是那很酷，下一件事就是秘密钥匙
每个Django项目都有一个与之相关的秘密密钥，它们总是
该项目是唯一的，或者至少它们应该对该项目是唯一的，并且您
不想让它在生产中公开，因为它可以
可能会导致安全漏洞，而您不希望这样做，只需做几个
更改是好的，接下来是调试这是非常有用的
在学习时或在同时开发两者时
进入实时服务器，实时生产环境，这是一个具有
真正的人，真正的陌生人使用它，你会把它变成假的，并且
某些含义后来允许主机（如域名）很大，但我不是
要进入现在安装的应用程序，这是
Django安装放大器，默认情况下会安装很多
稍后再说，但这是您要构建应用程序的地方，就像您知道是否
您拥有要创建的博客，如果您将其放入已安装的应用程序中
拥有产品拥有已安装应用的产品列表
我的意思是说Django的核心，并在以下方面更多地考虑应用程序：
组件然后是应用，那么应用就具有了新的含义，例如您的
手机上有一堆应用程序，这不像是小事
更大的Django项目本身中间件的片段这是我的意思是
这里发生了很多事情，但这与您的请求以及如何处理有关
处理请求以及如何处理安全性之类的东西
这是我们稍后要讨论的内容，绝对是高级的内容
主题，但这很好，因为它使我们知道安全性很高
我们可以看到内置的功能，其中有些已经存在
根URL Kampf，这是我们肯定会涉及的内容-这就是
Django知道如何路由您知道的任何给定URL，就像我是我的服务器一样
现在运行，所以如果我看一下正在运行的服务器，如果我斜杠
你知道这是什么URL，所以这些东西是
默认情况下，由Django自动路由，这真的很酷
内置功能接下来是您知道的模板，例如Django
渲染出HTML模板，我们将介绍很多内容，但是
基本上就像我们在哪里存储它们以及如何渲染它们
工作所有这些内容，我们将在稍后进行介绍，但本质上是HTML页面
在Django中渲染，这真的很酷，它非常有用，而且绝对是
我们接下来要讨论的常见主题是wsgi应用程序，这是
服务器的工作方式，这样服务器就可以通过并使用以下设置
在某些情况下，您可以更改它；在其他情况下，您可以保留原样
接下来的事情是Django确实非常好地映射到数据库
因此MySQL PostgreSQL和其他一些非常容易地映射到它
在此处更改后端以及其他一些设置
您可以继续查看文档，但默认情况下它具有续集i3
数据库已经在那里，您可能会看到那里非常酷
事情是我们有密码验证器，它只是验证密码是
好或至少好于发现Django的当前标准，我们
有一些国际化的东西，我现在会暂时跳过
最后是静态文件，例如您将图像存储在哪里以及JavaScript和
您的CSS，例如您将这些内容存储在哪里的静态文件中，
当然也要讨论，但是设置可以控制所有这些
对，所以这是我们所有Django项目运行方式的基础
这是我们的主要配置，我的意思是设置就这样
意味着我们将更多地谈论和使用这些东西，但是我想提的是
最后一件事是实际的实际事情是这样的数据库事情
我们在这里有这个错误，要运行我们的数据库，我们可以运行在py上托管的Python
迁移了，所以这实际上是在沉没我们的设置
我们在Django项目中拥有的设置，以及在我们拥有的所有应用中
一定要再检查一次，但是所有这些就是这里了，所以我们有数据库
你会我3我刚刚说过嘿，请确保您和Django的数据库已经准备好，
您已经准备好开始工作，因此，如果我实际更改了该db2，
可以再次运行迁移，您知道Django实际上创建了一个全新的
现在对我来说这是一个数据库，如果您有续集精简版，这几乎是对的
MySQL或PostgreSQL，您必须自己创建这些数据库，但是
对我们来说，就数据库而言，我们可以做任何我想做的事情
将使用默认的DB尘土飞扬3我将继续删除
该文件现在我们对设置如何工作有了更好的了解，让我们
继续并创建我们的第一个应用程序，请在下一个应用程序中查看
现在是时候讨论Django的关键组件之一了，那就是
您应该将应用程序视为更大的组件或组件的应用程序
Django项目很好，所以它们是可以容纳一个
大量的代码，但它们不像手机上的应用程序那样正确，因此
如果您跳到代码本身，我们会看到我们已经安装了一些应用程序
默认情况下是正确的，所以这也是您放置第三方应用程序以及
您自己的权利很酷，所以让我们看一下默认或内置的
我们可以看的第一个是admin，如果我进入我的
项目并输入admin，我将看到类似此Django的内容
好的管理，所以我已经输入了用户名和密码
因为我一直都在使用Django，但是您可能在这里看不到任何东西
但您知道，实际上问题应该是，例如，我实际上如何
在这里，我将继续前进并进入终端，注意我有两个
终端窗口打开我有一个正在运行服务器，然后一个是
只是在jingle项目的根（也称为fort manage top pi）中，您是
可以看到我是如何到达那里的，所以肯定有几件事
首先需要确保我在运行Python时需要确保
管理高级py迁移我看到类似这样的信息，我有一些应用程序在
内置的那些默认情况下我不想看到错误
基本上在这里，但您绝对想确保我的网格已完成
因为我们要创建第一个用户，所以我创建了Python
超级用户，一个命令将允许我们创建一个有权访问的用户
管理员这不是普通用户这只是最终的超级用户
对，这样您最终会用到的用户就可以使用
CFE的用户名，我将电子邮件地址留空，然后
现在要输入我的密码密码输入实际上并没有显示
还有当你在发展的时候
在学习中进行测试，您可以在这里使用您想要的任何合格者
不必一定要安全，当您上线时一定要安全
建立一个真正的项目，那时您真的想确保安全，所以我有了我的
这里的用户名和密码都是小写，而我的密码只是我的小写
可以实际登录到该管理员，所以我在这里所做的是实际上创建了一个
实际上在数据库中的用户Jenko为我做了所有这些事情，我没有
必须做任何非常酷的事情，这样才能使事情变得超级容易超级用户
友好，无论数据库多么漂亮，都将发生相同的动作
很酷，所以我们实际上只是在谈论第一部分或前两个部分
管理员不需要的内置组件或内置已安装的应用程序
那是该用户权限，因此我实际上创建了该用户，然后创建了一个超级用户
然后管理员就是我刚刚登录的帐户，因此我可以单击用户，然后
可以看到更多有关此关闭用户的信息，我可以在这里说贾斯汀·米切尔（Justin Mitchell）
在CFE通讯团队打招呼，您现在知道我的用户吗？
可以保存它，我可以在这里讨论的管理员内部做各种各样的事情
将来还会有更多关于管理员的信息，但是真的很酷，我也可以删除用户
我可以回去创建新的东西，你知道里面有很多内置的东西
关于管理员真的很好，但这就是所有有关应用程序的信息，
接下来的几件事还与我们无关
所以我们要谈论的实际上是创建我们自己的自定义应用
我们已经完成了一些基础操作，现在让我们创建一个自己的自定义应用程序并拥有它
在管理员内部，当我说自定义应用程序时，我的意思是我们自己的数据，所以我们自己
数据的结构，让我们看一下看起来像什么
在下一个
最后一个，我们看到了Django项目的一些内置功能
没错，我们看到其中一些组件也称为应用程序，这些组件使我们能够
有一个用户和一个管理员，这两件事确实很惊人
易于使用，非常人性化，但是我们想要做的事情和目的
使用Django是构建我们自己的应用程序和我们自己的组件，现在我们不要混淆
像手机上一样的应用程序
这个更大的整体的一部分，这就是您的Web应用程序，让我们开始吧
前进并跳入您的一般项目的根源，我将使用该术语
Django项目的根源很多是指管理较高，因此我们
管理级别较高的前提是您已激活虚拟环境
每当我说我是Django项目的根源时，这就是你想要的地方
会以为是这种情况，所以我被导航到了那里，当然这是
它实际位于我的系统上的位置对于您来说可能有所不同
如果您不知道如何到达那里，只需回看本系列的一些视频，那就是
下面的链接确保您无论如何都可以观看一些基本内容，因此
让我们继续并创建我们自己的自定义应用程序，以便我继续使用python man jump you
我启动应用程序，然后无论谁想给该应用程序命名，我都会继续
并将其命名为产品，然后按一下并重命名就可以做同样的事情
它可以写博客，也可以将它写到个人资料，也可以将它写到购物车
是的，所以我可以说出各种各样的东西，老实说，这四个
名称实际上像电子商务项目一样合适，如果我们看一下
回到代码本身，您会发现嘿，我现在已经拥有了所有这些新代码
在我刚创建的那些不同应用程序的名称中
现在，这确实向我们展示了一些我们可以努力实现的东西，就像我们完全可以
建立一个既可以做所有这些事情又可以做的事情的整个项目
向您说明的是，这些应用程序中的每一个都应该做一件事，然后做一个
像产品应用程序这样的东西真的应该做与产品相关的事情
与心脏无关的事情应该是
分开应该在自己的购物车应用中，我们将了解其中的含义
稍后，但是这里的想法是您的应用程序应该重点缩小
一旦它开始变得广泛，那就是当您开始将其带入另一个应用程序时
如您所见，创建一个应用程序真的非常容易，所以实际上没有
除了懒惰以外，不这样做的原因，我想避免
长期以来，这就是为什么我现在告诉你的原因，所以我想展示
您如何以存储数据的方式使用应用程序，这些应用程序确实是
适用于存储数据以及将要存储的数据映射到数据库
因此，这意味着我要继续删除我所使用的其他一些应用
刚刚创建是因为我们只是不需要它们，因为我们仍然
学习正确，所以我删除它删除了其他
现在我只有产品，所以打开模型停止饼，我们将讨论
其他文件，但现在只是模型，我要存储产品
正确，所以我希望后端能够存储我创建的产品的方式
我做得很好吗，我写了一个叫做product的类，
在这堂课中，我想赋予它各种属性，所以我想说
它有一个标题，我想说它有一个描述，你知道
也许现在就这样也许我只想要标题说明也许我想要
价格太好了，所以现在说标题说明和价格，我要这些
映射到数据库，所以我实际上如何在Django中做到这一点
实际上非常简单，我们使用了称为模型字段的东西
模型点，我们只需输入模型点，默认情况下已将其导入，而我
现在将仅对每个文本字段使用一个文本字段，我们将讨论更多
稍后再使用高级字段，但让我们仅在每个字段上使用文本字段，然后我的
产品本身是我在这里使用的实际类，我需要从
MA的默认Django类，所以这意味着它将获得一个
我们绝对需要做的许多功能，这些功能我们将永远不会去做
变得越来越先进，但这是一个非常非常简单的过程
产品模型，它将映射到数据库，我们将在下面看到
片刻之后，自从我创建了模型间谍并创建了这个应用程序以来，我需要添加
设置中已安装的应用中的应用，这很简单，我只需输入自己的
在这里，只需写出产品，即我创建的应用的名称即可
这是这里的文件夹，所以我已经安装了我刚刚安装的应用程序的产品
要去后面加上逗号，现在我该怎么办
我当然要确保我将设置保存为顶级派，而模型为哑派，
现在我可以运行的是叫做make migration的东西，所以Python设法py
进行迁移，然后由Python管理顶层py迁移正常，因此这些命令
您肯定会想起，以便Python管理py进行迁移
然后Python管理好UI迁移就可以了，所以我第一次这样做
第二次我做了一些更改，它做对了所有事情，所以我想运行
我每次更换模型时，这些都会彼此结合在一起top
馅饼，所以让我们继续在这里添加另一个字段，我只想说活跃
好吧，还是让我们做总结而不是描述，这样我们就得到了描述
总而言之，这两个可能并存，但现在我进行了更改
到我保存的模型，现在我想再次运行迁移，它将
问我基本上是默认值，我现在要继续说2
我们稍后再讨论，但是我要继续说默认值，说这是
好的感叹号好，所以我再次进行迁移，然后我继续
现在再次迁移为什么我向您展示了所有这些问题的主要原因
是要记住，我们始终希望运行make进行迁移，而在进行make时进行迁移
随时随地在任何地方进行更改以提高模型
重要的很酷，所以我们现在有了这个模型，我想看看这个
在管理员内部进行建模，所以我在这里要做的只是进入M和更高的位置并执行
从点模型导入产品，这就是所谓的相对导入
它是从模型PI导入产品类，这是相对的，因为
管理员PI和模型点pi位于相同的目录中
相同的模块，所以我实际上可以进行相对导入，而我在这里所做的只是
管理员点站点进行注册和生产，我们将其保存，并且服务器仍在使用
运行中，我回到我的项目Maya Django admin中，现在我看到了这个新东西
这里称为产品，我可以添加一些价格和价格的新产品新描述
摘要，嘿，我有我的默认值，是说这很酷，这是
很棒的解释标记已保存，然后我们创建了一个新的
产品并将其保存在数据库中，这才是真正的核心
它的基础知识就可以了，现在在数据库中保存了一个基本模型
可以一遍又一遍地使用它来将各种数据保存在数据库中
这不是一个很好的模型，我会说，这样的局限性在于
关于它的范围，稍后我们将介绍其更高级的功能，但对于
现在这很酷，我们要做的就是这样一个模型
我们仍然需要做的是在Python shell中查看如何执行此操作
实际上只是使用Python命令来保存一些东西
现在我们要做的就是使用Python shell创建新产品，所以我
在此之前，请先使用admin，然后再使用Python shell，我想这样做
确保我在Django项目的根目录中
你知道我们对pi进行了管理，而我要运行整个py对Python进行管理
外壳程序，因此当您管理UI外壳程序时，这意味着所有Django
项目的东西将在Python解释器中工作，所以我按Enter
看起来像一个普通的Python解释器，但这不是因为我可以从
产品模型导入产品好，所以我可以做这些
导入我可以导入类，就像我们在动漫中所做的那样
相对重要的管理员，这更接近于内部的绝对导入
节目，所以我继续并点击Enter，然后我就可以制作该对象的产品
所有这些都是内置的Django命令，我们将在
未来，但就目前而言，如果我编辑，我发现这里只有一件事
对的只有一件，那是因为我只在视频中保存了一件
这就是我所做的一切，否则您可能会看到更多内容
这很酷，如果您有，那就意味着您正在尝试的很棒
但对我来说，我想看到的更多是我想在这里实际创建它们
在外壳中，我想具有执行这些命令的能力，因此很简单，我们
只是将要创建的对象进行乘积处理，然后我们要创建新的对象
在此命令本身的内部在再次创建自身的内部这是内置的
Django，这是jingo标准的默认设置，因此在模型中，我们
看一下该产品所需的东西，我们有四个领域
是必填项，因此我可以将此处的这四个字段作为新产品的标题传递给
写作和描述是另一个正确的价格，因为你知道
价格，最后总结得还可以吧
注意这里的每个参数都是一个字符串本身，所以我在
也有目的，这就是我可以创建一个新的
产品点击进入并创建它，我可以按一下并再次输入它正在创建
正确的新产品和新产品，如果我再次使用该产品，我该怎么做
再次看到这里是一个列表，也称为查询集，我们稍后再讨论
它向我们展示了所有现在创建的所有新产品，前提是我们仍然拥有我们的
服务器正在运行，您可以使用ctrl C将其关闭，但是如果我刚去的话
并确保我的服务器正在运行，然后可以重新进入管理员
好吧，所以您登录到您的帐户，我的意思是，您看到的是进入产品目录，您在做什么
知道我那里有所有这些产品，所以这是另一种实际的方法
只需使用命令即可在数据库中创建事物，而不是您知道
单击并浏览表单，然后做所有的漂亮工作
很棒，所以我们还有很多事情要做
显然，我们希望以另一种形式看到它，但是在我跳到另一种形式之前
我想看看实际上我该如何实际创建一个不是
令人费解的像我实际上不应该为它传递价格的字符串
实际的十进制权利，也许标题不应该是这个长文本区域
也许应该只是一个短领域，所以肯定有我需要的东西
更改此产品模型以使其更好，这是我们将要做的
下一个通过添加新字段
所以现在我要做的实际上是从这些模型开始
不喜欢我在这里所做的事情，因此为了让我重新开始，我可以删除所有
迁移文件夹中的文件，然后将其保留在该文件夹中就可以了
如果有PI缓存，也要删除它，然后我也要删除
我的续集我会数据库没问题，所以回到我的模型中，我想更改这些字段
与我刚刚做的事情不同的是，您经常会做的事情
您正在学习正确，您将删除这些迁移，然后删除
该数据库确保您可能会丢失一些数据，但这没什么大不了的
在学习过程中，这实际上真的非常重要
所以对于这些领域，我想将它们转变成某种东西
对它们的真实性更现实，所以让我们继续看一下其中的参考
Doc本身就是这样，叮当项目comm寻找模型字段
字段类型，您可以对此进行快速Google搜索，您会看到
所有不同字段类型的参考以及我们实际使用的内容
正如您所看到的，到目前为止，它们只是其中之一，所以我滚动了很多，所以我
仅使用了此文本字段，这是我们在此处拥有的众多文本字段之一，因此
让我们继续，并首先使用一些不同的标题字段
限于多长时间，所以我将其更改为char字段，我将
添加一个称为“最大长度”的内容，我最多输入120个字符
那仍然是一个相当长的标题，但这就是我想要的，当你
使用char字段，您必须使用最大长度，因此最大长度等于所需的长度
好吧，我要暂时保留一下，保存下来，现在我要去了
继续尝试并正确运行我的迁移，这样我就可以使用Python管理的um py
进行迁移时出现错误，提示char字段必须定义最大长度
我刚刚提到的属性是必需的，但幸运的是Django会告诉我们
如果我需要保存某些内容，则我的一些箭头会消失
描述文字字段实际上很有意义，但是如果我们的产品
不一定要有描述，然后我可以
说空白等于真实，我也可以说没有非法者是真实的
我将在稍后解释这些两者之间的差异
价格我们的价格字段应该是什么，应该是文本字段还是应该是
好吧，让我们看看是否有一个十进制字段嘿，你知道什么有一个
十进制字段和浮点字段我要坚持使用十进制字段
是文档出现的地方，并使我们更轻松
告诉我们需要什么好吧，所以这里需要什么，所以这两件事
在这里是必需的，但是如果我们走了一点，它说持续时间字段
我们不会使用它，但是里面什么都不需要
我们有一个要求的电子邮件字段，但是已经在里面了
它已经内置，所以要花一些时间才能习惯，但这是
本质上文档发生了什么
正确，但是它也向您显示文档中包含必需的内容
换句话说，让我们回到这里，将其更改为十进制
字段，让我们保存它，我保存它，它将运行这些错误，正确地向我显示这些
错误，它告诉我确切是什么，但是文档也是如此，所以文档
说最大位数和小数位，所以我们继续将其添加为
产品小数位将是2，就像您知道它不会是3
小数位，您没有三个小数位，然后是美分
像千位数一样允许的位数是
实际上对于一个十进制数来说很多，所以只需在垫子上做就可以了
你的头，一万美元，这很酷，所以我现在
有一些更强大的字段摘要，我可以将其保留为文本字段
也许我希望摘要在默认情况下在其中也许我想要两个
肯定在那里，但我要继续并摆脱默认值，我会
请在下一个视频中稍等片刻，解释一下默认情况，但
我会在这里解释发生了什么事，好吧，所以我现在保存
我需要做的是实际上再次运行迁移请记住
每次您更改模型时，如果Ron Python男人阻止您，我都会停下来
迁移，然后Python设法进行py迁移，现在我删除了数据库，因此
这也意味着我需要重新运行一次创建超级用户，而我
要将其保留在SC Fe中，输入学习代码的密码，然后我们就可以了
我的服务器仍在运行，而我的服务器仍在运行
在Django管理员上刷新这里，我仍然必须重新登录，我
看到我实际上不再有任何产品，但是如果我要添加一个
产品的布局已经更改，标题不能太长
标题我可以说新产品和说明，如果我可以写东西
想要定价现在这里有一个数字项目，所以我实际上可以写数字
29.99美元，我可以为摘要添加一些新的摘要感叹号，然后点击保存
您知道吗，没有很多不同吗，让我们看看吧
在外壳中也是如此，因此python设法对py进行了py处理，我们将继续进行操作
从产品顶级型号进口产品，这是完全一样的东西
转到我们仍点击该产品的位置输入产品对象
创建标题等于较新的标题价格，现在我们可以将实际的小数点后
数字在这里没有字符串，所以到39.99，然后总结现在字符串真棒酱是
很棒，我们点击进入它看起来像它创建的一样，没有问题，我们回到
我们在管理员中的产品仍在运行，我们看到我们有一个新产品
这里所有的东西都被保存了，所以将这两个东西带入了
彼此结合，所以我们已经开始保存东西
已经希望看到在Django中映射数据有多么容易
这是我要对我们的模型进行的新更改，而不会删除
数据库或该问题的迁移，这意味着我们要
其实对这两个发生了什么了解得更多
事情，所以当我们运行进行迁移和迁移它与数据库同步
我们的模型，但是如果我们向模型添加字段，数据库将不知道
该字段，因此我们必须确保它知道并进行迁移和迁移
通常会允许这种情况发生，但同时也会带来一整套类似的问题
像要添加到数据库中的字段这样的标记
该数据库中的先前事物词，所以让我们看看我的意思是
对，所以如果我跳到管理员，我会看到这里有这四个字段
但是如果在我的模型中，我决定说特色字段正确，而我想使用
让我们说模型点布尔字段好吧，所以我现在想添加此布尔值
字段，但此特定对象此保存的对象对此一无所知
对所有未来的人都可以使用该字段，但是如果我去了，那么这个特定的字段就不是
前进并保存了此代码，然后转到Python设法进行了正确的py迁移，因此
默认情况下，您执行此操作时会收到此错误，它说我做了一个不可知的字段
提到我会说这些东西意味着什么，这就是对的
因此，如果我说null等于true，那么此错误就不会发生
因为它会说所有这些旧值只会在
数据库中它们可以为空，这不用担心，但我不想这样做
相反，我想做的是实际上我想要一个旧项目中的值
数据库可能是一个项目，可能是一万个叮当实际上没有
知道数据库中尚未发送的项目数
再次，这可能是零个项目，因为Django正在关闭的是这个
这里的migrations文件夹已不存在该初始值，请注意此初始值
一个在这里，它正在检查这里有什么
建模的意思是嘿，您要在此处添加新字段的新字段
不在此初始描述中，而是被添加到其中，因此我们假设
数据库需要知道那里发生了什么，所以我们需要
告诉数据库我们现在应该执行哪些默认操作，您可以执行此操作
您可以在代码中在此处执行几项操作，说不合法
是真实的，或者您可以设置默认值，或者您可以同时做两个正确的事情，所以您可以
那里有默认值，因此null等于true或默认值
在这种情况下，这是一个布尔字段，表示true或false
您可以说default等于true，所以您可以绝对正确对不对
这些和代码，否则您将收到此错误，并且可以提供一次性的默认设置
对于其中所有以前的事情，我要说一个
从字面上说是正确的，所以这意味着数据库中的所有内容
它将遍历数据库中当前已经存在的所有对象，
它会将那些东西保存为具有true值的特征字段
相对于错误我拥有真实，现在我们去做
迁移最终要做的是为我们开发了一个文件
文件，就在这里，数据库实际上仍然不知道
知道它对这个领域一无所知的任何事情，仍然是因为我们
没有运行迁移，所以我实际上可以回到我的Django项目中，
得到这个，谢谢，没有这样的专栏，他去那右边，那是一个错误，你
可能经常看到我知道你会因为人们忘记了
因此，我们希望运行由python进行py迁移的Python，因为我们始终希望make
迁移，然后迁移，然后我们现在就进行更改
实际制造的，正如我们所看到的，所有存储在
数据库的所有新特性都为true，没有默认值
那里很棒，所以很棒，那也意味着在我的模型中
夏天，如果我不希望这样怎么办
好了，我可以说空白等于true，但让我们继续说null
等于false，看看这里会发生什么，我该怎么做？
模型，所以我必须要做的是运行由我管理的Python
迁移，然后由Python管理的WI迁移很酷，所以现在我知道了
回到这里我刷新摘要不再是粗体，现在我可以离开它
数据库中为空，因此如果我将blank更改为false，则保存并再次运行
进行迁移，然后再次迁移我可以回到这里刷新并注意
现在它说它是大胆的，所以如果我保存并继续，它将给我
该字段是必填字段，因此，所有要做的工作都是空白，与该字段的方式有关
呈现的null与数据库有关，因此，如果空白为false
意思是它是必需的，那么它将按要求呈现，没有什么要
就像我们在这里看到的两件事一样，对数据库进行处理，但是null为
true或false表示数据库中的数据库可以为null或为空
很酷，因此更改了模型中的某些项目，这过去非常困难
即使您觉得几次这样做有点挑战
破坏它是导致迁移失败的原因，这里的迁移已经到了
导致数据库再次运行所有这些内容
时代真的会让您对模型感到满意，我向您保证，并且
然后尝试向某人解释它尝试向某人解释制作视频
尝试解释我刚才所做的所有事情，并引用它们阅读
文档，无论您需要做什么，以真正更好地了解此基础知识
模型的工作原理，所以我们肯定可以做更多的事情
模型，但我将保留它，因为Django还有其他功能
我们确实要开始谈论，并且确实与
视图和URL
因此我们想将此默认首页更改为我们自己的自定义首页
我们会通过创建类或函数来做到这一点吗？
基于视图的视图，因此它意味着它将处理我们将要处理的请求
所有这些，但是现在我们要做的只是说明
目的是为了做到这一点，所以我创建了一个名为pages的新应用，我添加了这些页面
设置要正确安装的应用程序，以养成这种习惯
每当您创建新的应用程序，但您现在应该知道该怎么做的时候
为什么我没有做好，所以在用尽里面我们看到什么都没有
在这里，您将为您创建各种各样的东西
页面将视图视为处理各种网页的地​​方
以这种方式思考，我们将使用函数或类来执行此操作
用Python编写的，所以我要做的第一个只是一个主页，
基本上，这只是一个非常简单的功能，是您为其命名的家
无论您想要什么名字，我可能都会说大多数情况下您可能会添加视图
就像您不会使用该视图将其称为主页一样
正确，所以我稍后将介绍所有这些内容，但让我们将其称为“家”
查看还可以，然后返回一些我们想返回的HTML
因此，举例来说，如果您愿意的话，我现在想说h1 hello world
熟悉Python，您会知道这只是一个非常简单的Python
函数实际上这里没有什么与Django有关，所以我们需要
将其更改为与Django相关，现在此字符串中包含HTML
这是一串HTML代码，不是实际的HTML代码，我们将在后面讨论
稍后，但是如果我们只想要一个HTML字符串，这绝对有用
出于某种原因编写代码，但实际上我该如何使它发挥作用
我们使用来自Django的HTTP导入HTTP响应HTTP响应
可以只用该字符串的HTML代码进行调用，就像我们真的
接近使它成为实际的功能视图或功能页面，因此
如果您不愿意，我将在此处添加args和关键字args。
熟悉args和关键字args，我绝对建议您看一下
在Python上，这是特定于Python的，如果您不担心它的话
好的，您可以查找它，但是现在我们可以解决这个问题，所以我已经
现在创建了一个函数，此函数要做的就是返回一些HTML代码，
说你好世界，但它通过称为HTTP响应的方式将其返回
好吧，让我们实际进行这项工作，我要保存它，我希望
最好的刷新在这里效果不佳，如果我尝试其他页面，如
ABC也不起作用，但显示页面未找到，并显示某些内容
关于URL，这是我们实际包裹URL的地方
URL出现了，当我们浏览设置时，我们确实提到了URL
就在这里，因此网址在Tri Jango网址中，否则设置模块或
URL内的settings文件夹，此配置文件夹具有设置和
那里的网址，其中有一个我们已经在使用的网址是admin，
那是它实际拥有的唯一路径，所以我现在要做的实际上是导入
该视图可以与我的网址一起使用，现在您已经在这里有了一些这些东西
对，所以这实际上是为我们写的，所以我可以摆脱他们拥有的东西
以正确的方式写，从正确的页面说出来，这样页面就可以
应用导入视图的位置，然后我可以从字面上添加此网址格式
就像它在代码或其中的注释中说的那样，我没有称它为家
但是相反，我称它为主视图，所以在那里
我只是离开了他们给我的主视图，而主视图我们保存了
让我们回到首页，您好，世界真的很酷，
我不太认为这是一个好主意的几件事
这是怎么写的，如果我想使用产品视图怎么办？
我从产品导入视图中走了，事情变得令人困惑，所以不要这样
转到视图导入主视图导入要使用的实际视图，然后
然后把它放到那里好吧，所以我们这样说，当你知道相同的时候
确切的响应哇，这很容易工作，不需要太多操作
让我们谈谈网址格式，以及这部分如何与
现在我们的视图URL模式您注意到我有这个空字符串
这条路径，因此，如果我实际复制并粘贴到此处，然后说回家然后放
在它的最后有一个斜线并保存，我实际上可以回家了
同样的事情也会出现，如果我使用ABC这样的其他页面，
出现并且找不到页面是因为我们尚未路由到该页面
查看正确的信息，例如，我想给这个联系人打电话，你知道
我们可以暂时忽略掉这个名称，但是如果我想称呼这个
联系确保它实际上可以转到相同的主页视图，但实际上您是
可能想再有一个叫做“联系人视图”的视图，我们将再次
我们的和关键字args，然后我们将返回HTTP响应，然后我们将
说出h1和联系页面，并关闭该h1标签，然后我们将导入
就像那样，然后我们走了，那将给我们
该联系页面现在非常有用
正确的路径，因此当您转到Django页面时的URL正确，因此我们转到
Django页面就在这里，而Django知道正在请求某些内容，即
不同，所以首先要请求的就是这个主页
然后如果我转到另一个页面（如“联系人”），这是一个新请求，
拿到那里的东西，Django足够聪明，知道嘿
该URL间谍在该URL间谍或主要配置中找到了该URL。
默认情况下，我们已经设置了该网址，然后输入了
匹配的网址，它将查找用于处理该网址的视图
对，所以我们已经有了处理它的视图，您知道我们可以
拥有尽可能多的视图，这完全取决于您，实际上您的
项目可能有很多观点，所以像社交一样
您绝对可以开始使用的那些东西，我建议
您是否建议您采取这种做法，并在某种意义上说“嘿”
这实际上是如何工作的，现在我该如何制作自己的所有页面
关键的东西在这里遗失了，但我暂时还不会进入
我要说的是，请记住当我们访问URL时，我们正在请求某些内容
从该URL就像敲敲某人地址的前门
我的意思是，除了这是数字的，我们并没有太大不同
去那里，我们要敲门，我们要东西，或者我们要
在这种情况下，我们需要的是该URL处的网页，那么
实际发生的是在这些视图上，我们有args和Kure狗可以捕捉
一切，所以如果我实际打印出来，让我们继续打印出args，
关键字艺术，然后返回该首页并查看我们看到的终端
这是正在传递的东西，我们有这个WSGI请求嗯
请求一些东西，这意味着它实际上是一个即将到来的论点
通过这里，我可以说请求，然后使用args关键字arts，这样每个人都有
请求默认情况下进入此处，因此如果我返回刷新，则我的args和Q分别为
狗是空的，我的要求绝对在那里，所以我可以打印出来
那个请求，我们可以看到它，那么这个请求到底干什么好
它可以做很多不同的事情，但是其中之一是
对我们来说重要的是请求用户，所以这是身份验证的地方
就是在这里登录您的用户，但这也是我们的方式
视图可以访问它，所以如果我在这里刷新，我可以看到我的CFE用户已经
如果我打开了一个隐身窗口，请登录或
只是另一个浏览器或已注销，我会看到它是一个匿名用户
并非实际登录的人，所以两件事实际上都是有效的
他们真的很高兴知道，因为那时我可以做各种各样的事情
该请求用户现在要高级一些，因此在到达那里之前
我想使这个基本网页或这个基本应用程序更好地用于
到目前为止，我们喜欢这个HTTP响应，它呈现了HTML和
太好了，所有这些，但是您知道您可能希望熟悉HTML
你有一些背景HTML只是渲染了h1，这不是很
很像通知，就像我的头空了，只有h1是唯一的事情
那又回来了，所以现在实际上是个很好的时间来讨论
Django模板引擎，因此我们可以覆盖此shibi并以
另一样东西叫做Django templating
快速回顾一下，我们转到一个URL，就像我们在敲某人的门一样
请求服务器或Gengo向我们返回的响应是
现在，正确配置Django项目时常会发生此过程
发生这种情况时，Django会识别出正在使用的URL
已请求，或者您知道正在请求该网址，这会使它分崩离析
弄清楚什么功能可以正确地响应它
我们想要用某种HTTP响应来响应的功能，基本
默认情况是，这只是您的回应，我们可以传递是否
HTML本身或只是一个字符串都没关系，我们可以返回HTTP响应，
我们甚至可以返回它，就像在这里绝对是空的一样，
它仍然可以正常工作，因此这仍然是有效页面，但是我们要做的是
而不是在这里写字符串，我们想使用一些内置的快捷方式
Django拥有，您可能已经注意到快捷方式点导入渲染已在其中
默认情况下，所以当您在其中创建新应用时，我想
实际上能够使用它本身，而不是返回HTTP响应，
我想做的是返回渲染，它将要接受一些参数，一个是
请求传递的请求参数将是一个
举例来说，模板名称是首页HTML，最后一个是上下文或
现在我们只做一个空字典，我们将讨论上下文
稍后，这就是您能够返回某种HTML模板或
HTML文档无论哪种方式，那么我们实际上如何才能通过实际的方式找到它
例如，如果我保存此内容并在此处刷新，则该位置在哪里，我会收到此错误
模板不存在，当然不是，我们实际上并没有
正确地创建了它，并且它正在我们的整个网站中寻找它，但事实并非如此
实际上知道要去哪里，所以我们需要为
这就是我们现在要在Django根目录中的SRC文件夹中执行的操作
项目，我们将在此处创建一个称为模板的新文件夹，该文件夹为
我们将保留所有我们认为合适的模板，因此在其中我们将
继续并做点HTML，使新文件通知模板在线
与页面产品和Django配置文件夹以及管理
顶派，所以我要在其中放一个HTML格式的点，然后我要打个招呼
世界关闭了h1，然后做一个P标签，这是一个模板，关闭了P标签
好的，所以我们保存起来看起来情况看起来不错
我们在其中制作了一个模板文件夹home dot html，我们想将其渲染出来
保存它，让我们回去重新运行它，mmm模板仍然不存在
是因为我们实际上没有设置Django来知道这些模板在哪里
我的意思是我确实将其命名为模板，但这是该目录的任意名称
是一个任意名称，这是一个最佳做法名称，但我仍然是
做好了，所以在设置中不设置圆周率，然后记住我说过我们要去的样子
如果您观看该视频，请返回模板
就是这样，所以我们实际上要放在der或目录的一边
现在该目录位置在哪里，我可以将其硬编码到您的路径
模板，然后执行此操作，让我们继续说PWD在这里是我的正常情况
正确的项目，这就是我需要做的Django项目的根目录
在这里添加模板，就像我点击保存并刷新的文件夹的名称一样
在这里，您知道我们的模板看起来很好吗，它们实际上位于其中
但是，如果我在您的计算机上将其发送给您，则除非该操作无法正常进行，否则
您的用户是CFE，因此我们需要做的就是复制我们在此处所做的工作
这实际上很简单，但基本上有一些小例外
我想使其独立于操作系统我想使其允许我发送
代码给您，它仍然可以正常工作，因此它是Baster路径，它连接了baster，
模板，所以我只是加入了管理顶部所在的基本目录
我刚刚创建的模板目录，我在那里刷新，它仍然在起作用
在仍然显示的模板上，所以这允许我做的是
多个页面，例如有关HTML的页面，请联系HP ml等，然后我就可以
从字面上将所有这些代码都带到这里，并说“ contact and about”，然后
在我看来，就像在家庭视图上所做的一样，我可以阅读有关更改这些内容的信息，
以正确的名称联系内容，以获取有关HTML的信息，并与该HTML联系我
说刷新一切都可以，大约看起来很酷，所以
它正在呈现HTML，注意这里没有点HTML，所以
这实际上不像渲染原始HTML文件，实际上是
通过Django和Django渲染出，每个tml
很酷，所以如果您从事过网页设计工作，那么您将知道那个点
HTML的消失使这些URL变得更加整洁，并且容易得多
导航和共享，而且我认为它也使它看起来更高级，所以
现在我们有一种渲染HTML文档的方法，但是您可能会看到
这些文件中可能有很多重复性，所以我们需要
用Django模板谈论一些基本的继承东西
我们将在下一个中做
是时候多谈一些有关我们的Django模板引擎了
实际上已经在使用，但是我们想了解更多有关它的信息，所以如果我看一下
像这样的事情，我们有两个大括号请求点用户再两个大括号
用括号括起来，这是Django默认情况下会执行的操作，实际上它会
渲染出相关信息，以便我们实际上在主页中刷新
我看到那个CFA用户就是我的用户名，如果我打开一个隐身窗口，我会看到
预期的匿名用户，因此这是模板中内置内容的一部分
引擎，我们可以在其中使用用户模型，我也可以说点是
经过身份验证的身份已登录，并根据是否说为true或false
他们已正确登录，因此我们肯定可以做很多事情
在那里，我们将很快讨论更多，因此请确保您订阅以获取
除了您还应该注意的所有事情是
我们的视图呈现了三个不同的HTML页面，这些页面实际上可能
在每个属性之间共享属性，比如说导航栏或更多
重要的是，像您这样的一些元数据知道我们是否在此处检查该元素，并且
看起来像您知道标题标签或描述标签或其他元数据
我们可能需要他在这里实现或一些CSS数据，我的意思是
这些页面中的每个页面实际上都可以使用的功能
所以这是模板继承出现的地方，它真的很有用
对我们来说，我要做的是创建一个根页面，所有其他页面
页面将要借用，因此请继续基于HTML进行调用，并基于HTML
这是惯例，这就是您要怎么称呼它的意思，所以您会
想要使其成为一个实际的HTML文档，因此将文档类型设置为HTML，然后关闭HTML
HTML然后是正文
身体还好，然后我们要在这里做一个头标，在这种情况下，
表明这实际上是有效的，我们将继续放置标题标签，然后
说企业家的可待因正在做尝试Jango嘿嘿好吧，不是真的
聪明，但这是某件事，所以我们有我们的头部标签，我们的身体标签，我们有一些
HTML在这里，我们有一些东西，现在我想做的每件事都要做得很好
在这些页面之一中，我还希望所有这些东西都完全相同
我该怎么做才能做到
基于HTML大括号％块内容％大括号％大括号
方括号块或大括号％块或更确切地说是块，所以此语法
可能对您来说有些奇怪，但基本上是说嘿
介于两者之间无论我们进入何处，我们都将其替换，所以替换我
好的，这就是我要说的
这些块在任何给定页面上都是这些完全相同的块，所以让我们举个例子
我要去把它剪下来，然后像这样说，所以我有一个
在这里阻止，这就是内容，从本质上讲，将会是
复制到这里带来了这里，我要做的所有事情
再次基于HTML扩展，这些大括号百分号表示了它
肯定会有点混乱，因此请确保您正在对此进行测试
您自己来确保它可以正常工作，所以现在我要为home dot买一个新东西
如果我刷新了HTML，现在回到首页看我的标题标签，现在改用编码了
企业家正在尝试使用Django，以便标题标签确实发生了更改，
它是基于HTML的，因此让我们在about上而不是在
关于花括号，并基于HTML扩展，所以这
现在可以从基于HTML的信息中提取信息，如果我像这样保存它并进入
关于页面，它只是说替换我啊，所以
呈现此默认页面的全部操作，以便我进行
实际替换其中的任何块我都必须使用它
我确实阻止了内容大括号哦大括号％块是
与Django相关的内容是我创建的变量，然后我们
在区块中将其关闭，您也可能会在区块中看到还可以的内容
我们说，然后刷新，现在已经更改了标题，所以我们
现在具有模板继承，那么当然，最后一件事将是正确的
与接触，所以我们再次基于HTML进行扩展，然后阻止
内容，然后像这样最终阻塞
实际使用的位置就在这里，但现在这些页面中的每个页面都统一在
当我使用导航栏之类的Django时，这更有意义，所以让我们
只是继续，我将使用h1或h1标签只是为了表明这是一个
导航栏不要在这里过多使用HTML，但这是导航栏所在的位置
我的关于页面位于我的联系页面上，也位于我的主页上，所以
这绝对是同一件事，这就是继承的方式
确实有效，我会说，您知道是否将其更改为阻止内容
主要或类似的内容，我将其中的每一页都保存下来
会正确更改，因为我没有实际渲染或没有替换
正确的块和这些页面中的每一个，而不是我什么都不替换，因此
他们只是不做任何真正酷的事情，实际上使事情变得
从长远来看对我们来说要容易得多，但这可能有点棘手
你的脑袋实际上是可行的，所以我也要做
建议您暂停视频或立即停止然后将其更改为其他视频
内容区域，并在其中进行几个区块，以查看所有内容的工作原理
确保他们对这种继承的方式有更好的了解
因为它肯定比仅渲染HTML还要棘手
页面只是一个空白的HTML页面，但这很重要，因此我们仍然会做更多的事情
在Django模板上，但仅此而已
所以继承允许我们做的是删除我们需要的冗余代码
我们将在此讨论的许多地方包括
模板标签，这样我们就可以多做一些相同的事情
不同的级别，所以我的意思是说有时候你会拥有一个导航仪
栏或导航栏，您可能希望将其放置在多个位置，以便
允许它显示在多个地方或允许我编辑
导航栏不必每次我真正进入我的基地时就能进入基地
模板，然后让它们用于新的导航栏点HTML和
这本身就是导航栏，它不会再有其他的了
真的会做模板继承，而不是我们要做的
是有某种正确的导航栏，所以我只是写了一个导航，然后做了ul和
在这里，你知道我做了一些导航栏相关的事情吗？
导航栏的确不错，但让我们继续前进，只说品牌就行了，所以我们有
一个带有品牌的简单导航栏，让我们说一下联系方式，大约可以，所以我们
保存并返回基本HTML，让我们摆脱它，这是一个导航栏
没关系，所以我们只想继续使用并包含include，所以再次卷曲
方括号％include，然后是实际HTML文档的路径或位置
生活，我们会说只是您知道的导航条HTML，所以这非常非常
类似，不是非常相似，这与我们正确创建的视图相同，因此
无论我们放在这里，都将是我们在这里放置的非常东西，因此，相同的路径
我们将在稍后进行介绍，但这是我们可以包括外部
模板放入我们的任何模板中，因此我们将其保存并刷新，然后开始
我们现在有一个导航栏，虽然它不是一个很好的导航栏，但它是一个导航栏，
将会显示在我们所有页面上，很酷，所以您这样做的原因是
一旦有了一个大型的旧项目，项目就会变得复杂
想要使用这个包含，因为如果我需要做一点改变
转到我的导航栏，我可以直接跳转到导航栏HTML，非常酷，非常有用，因此
现在我们要做的是谈论上下文，就像我实际上如何
除了我们以前见过的那个请求用户之外，还使用其他东西，所以我想
实际上添加了来自其他地方的一些新数据，所以我并不难
每次都进行编码，但是它来自其他地方
因此使用模板和Django的主要目的不是为了继承
并包括并授予它可以很好地完成这些事情，您就可以做出漂亮的
很酷的网站，但我们真正想要的是来自后端的数据，我们想要来自
在我们想要的这些模板之一中呈现的数据库
看到我们有点喜欢那个用户的请求
几段视频之前，但我想进一步讲一点
你知道也许我想改变页面的标题或者我想拥有
根据不同的用户那里的不同内容现在我们要工作
为此，但我们首先要了解的是所谓的
模板上下文，这就是我们要涵盖的内容，让我们开始吧
前进并跳入我们的视野，我遗漏了这本字典
对，所以现在它是一个空字典，这实际上是我们可以在其中找到的地方
在上下文中传递给我们的模板，因为Django要做的是
模板，并且模板上下文将这些东西匹配在一起将其呈现
然后犯罪银行只是原始HTML到浏览器将看到这意味着什么
一秒钟，但这本质上是正在发生的事情
拿模板，他们拿一些上下文，玛莎把那些东西放在一起
将其转换为常规HTML，然后用户看到没问题，所以我的意思是
确切地说，上下文可以是任何数据类型，所以让我们开始吧
假设我们的about视图正确，所以让我们制作一个标准的字典
Python字典并说我的下划线上下文等于字典
因此，如果我在这里获取上下文并将其放入并替换该空的上下文，我们将获得
同样的事情现在也可以了，所以我说我想改变我的
标题，所以让我们继续前进，只要有一些任意键的意思，我在编造
这个键，我们会说我的文字，我们会说这是关于我或我们的，好吗
所以现在这是我的上下文，所有这些东西都是任意的，我把它们都整理了
您可能会猜到，但是我们这里有一个键/值对，所以
这只是一个标准的字典，键是字符串，这是标准的事情
在Python中，然后我可以使用字符串作为值，也可以使用其他内容
像一个数字，或者更像我的数字，我们
可以做一两三正确，所以我可以使用字符串，我可以使用数字，我可以使用
其他字典，我将让您自己尝试使用数据类型
因为那不是很重要，重要的是我们如何
实际上把这个带入到有关页面的上下文中，所以自从我有了这个
上下文我在这里有这本字典我为自己创建了一个自定义的字典
想要将其带入该模板并查看该模板，所以我
这里有两个不同的关键项，所以让我们来谈谈点HTML和
我们还要确保我们的项目也在该页面上打开，所以我们将转到
关于这里和那里，我们走了，所以我们在那个渲染这个项目的项目中
模板以及我实际如何渲染传入的任何项目
通常，我通常会带给您您一个P标记之类的知识，因此
HTML，然后是我想使用的任何上下文，因此我们使用这些大写字母
括号两次，使花括号大括号或花括号空间正确放置
中间有东西，然后大括号大括号，然后
我们做完了，所以我需要在中间走什么是这个
称为上下文变量对，所以上下文变量表示什么变量
我们是否传递到我们的上下文中，我们可以使用什么我们已经看到的要求
用户，那是已经内置在其中的东西，但是我该怎么办
实际访问我所经历的事情，希望您有一些
关于这个的直觉，如果没有的话，你会发展的，我们有这两个
变量，因此我们的键成为内部的模板变量
我们通过的任何给定上下文，所以现在我按照我说的做了，嘿，django
我们已经了解了点HTML页面，然后有了我想要的上下文
把那些东西混在一起，产生出我意料之外的东西
因此，在那种背景下，我们可以在HTML中说出下划线文字，
那里应该渲染出这个键和那个值正确，所以它采取了这个
这就是我们使用的键，它将渲染出这个值，我们可以做到这一点
与我的电话号码相同，所以回过头来，我们可以说我的文字下划线或
相当用花括号括起来大括号或花括号开头已关闭
崇高的文字为我们做到了，但您知道您是否使用其他文字编辑器
您想确保以这种方式完成操作，他们会说出我的电话号码，
说我们回到弓形页，我们刷新它，哦，哦，我们实际上不是
得到什么，为什么那么好，实际上我有可能
没有保存我的关于视图的上下文，因此我需要确保始终保存
一切正常，所以我的意思是如果它为空，则表示它没有通过
表示上下文为空，表示该内容实际上不是
设置它是一个非常酷的错误，马上就能发现它不是一个真正的
错误，它实际上是一个功能，但是如果我们现在在这里刷新，我们会看到该数据
通过它，以最简单的形式是模板上下文，它又是
只是非常快的事情，我们制作了一个模板上下文字典，
我们想要通过，然后我们现在通过，您可能要做的一件事
想知道是说我的清单，以及如何实际处理清单
因此，如果我说1 2 3您知道一些数字或字符串，但实际上并没有
不管我实际上如何看待这个列表，所以我进入这里，我说
我的清单我很好地呈现了清单，这很不错，但是那不是我的方式
我想在一个实际的HTML列表项中看到它，也许
那会好一点，所以这会变得更加复杂，
这使我们可以讨论接下来会发生什么
我们将其移到我们在列表的某些模板上下文中传递的位置，
要看到实际呈现出来的内容，我们想要实际查看该列表中的内容
是另一种格式，所以我要查看的格式类似于
因此，让我们在模板内部做一个ul，并做一个列表项，这样第1项
然后关闭该列表项列表项2
好的，那么我们将如何去做呢？
可以做到，但主要的方法是让我说几种可以做到的方法之一
错误的方式让我们先做错误的方式错误的方式就会进入
在这里进入您的视图，并将列表呈现为不同的变量，因此在其他变量中
像在某个列表中表示项目的单词，所以让我们在这里做另一个列表，然后
然后做我的上下文和类似这个项目的东西等于项目咕unt这个
不是最伟大的，因为它只会以那个结尾，但是本质上你
不想这样做，你不想走这条路线，但我们开始
向我们想要在模板中执行的操作迈进，那就是我们想要创建一个
模板中的for循环，因此模板本身可以进行这种排序
的流量，我们实际上可以进入模板，并且可以在任何
给定上下文对象或常量上下文变量，以便做到这一点，我们将
向前并用大括号或大括号％4，然后再加上一些任意的
变量名，我继续说，在列表中说我的子项，然后卷曲
括号和模板，它与Python不同，它更接近于
就像HTML一样可以使用，因此如果您打开for循环，则必须关闭for循环，这样
我们走了，我们有办法真正遍历这些东西，然后我
必须要做的是在上面放一个ul，然后放一个Li
在它的内部，然后我们可以再次使用大括号两个
大括号并执行我的子项，我们将其保存，这实际上将是
假设列表中有内容，请遍历我列表中的每个项目
列出，所以如果我现在在那里刷新，我们会正确地看到这两个新事物，所以我们
实际看到这些东西被评价出来，并显示在这里和那里
还有其他一些循环功能，其中之一就像for循环
点计数器，这使我们能够看到当前的迭代次数
所以如果我刷新，我会看到它正确进行1 2 3并在我看来被授予
更改顺序或更改值，甚至您是否知道ABC字符串，例如
这样的东西都会通过它，这是非常好的，我的意思是
允许我们在基于模板的模板内执行各种操作
从我们的观点来看，现在不要误会我的意思
我们仍然看不到数据库中的数据，就像我们仍在进行硬编码一样
像我一样，所有这些东西都希望在实际可以看到数据的地方进行
从数据库中获取，但我还有更多要做的事情
我们到达那里之前的模板和视图
所以现在我们要讨论的是模板中的条件
现在，您基本上想在模板本身中创建if-else语句
确保您的逻辑已经在您认为一般规则之子的观点上得到了处理
根据经验，当我们变得更高级时，我会进一步介绍这一点，但是
基本上，如果您要执行很多if-else语句，您将
想要在视图中执行这些操作并更改要在其中渲染的上下文
模板，您不希望模板做太多的工作，但是有
在这种情况下，您希望模板执行此操作，而我将向您展示
一个非常基本的例子，但我也给了你一点
用模板命名变量警告好，所以第一件事是
当您在此处有上下文并呈现出来时，例如
您确实有一个这样的列表，我们要对我们如何选择非常有选择性
将其渲染到我们的for循环中，换句话说，如果我改变了，可以说
例如我的文字是ABC，然后在我的内心，我在这里有ABC
然后我在for循环中更改变量，作为ABC，事情有点
毛茸茸的，他们可能会渲染良好的权利，所以它呈现出很好，但然后当我
实际想做一个条件，例如ABC是否等于3 1 2
就是这种情况，那么我可能想重新思考一下我实际上是如何命名我的
变量，因为它们是我的意思，那么这已经看起来很棘手，就像我
已经不确定发生了什么，所以让我们将其保留为我的文字和我的
诸如此类的文字在您没有抓住时会令人沮丧
但是随着时间的推移，您将获得一些技巧，我向您保证，
只是认识到如何命名变量，这在Python中是正确的
一般的权利，所以有时您可能会给变量命名一件事，然后是
渲染是另外一回事，我的意思是函数和类也是如此
我已经看到它发生了很多，它发生在我身上太多了，所以我只想
引起您的注意，因为我们现在正在做的事情
好的，所以回到本页面，我在这里有这种情况，所以我
实际上创建了一个，这很简单，我们只调用一个if语句，所以
如果某个变量或某些事物能够与另一个变量进行比较，则为百分比
一件事，或更简单地说，如果某件事是您知道是真的，那么您也可以传递
上下文变量在这里，所以在我看来，我只能说这是真的，
只需将其设置为正确的权利，这样我就可以继续使用这些条件
他们允许您执行的操作只是评估此语句是否
是真的，您可以像我在这里一样使用等于等式的东西
然后在这里的那个块里面，你可以渲染一些特别的东西
所以让我们继续在这里渲染一些东西，你知道我在做什么
会再提出一些概念上的小问题，我们稍后再看
我们只说加二十二，所以我有一个直箭头，也称为
直线（也称为管道），然后我们只输入ad：
然后无论我们要添加什么数字，我们都这样做，然后刷新
在这里，我已经渲染了一些东西，所以请注意第三次迭代
现在两次，这是因为我有我的if语句，但是我也有
默认值，或者我以前曾经拥有的实际上是我们想要做的，而不是
具有这样的默认值，我们只需要在这里说一个else子句，
以这种方式引入else子句，以便可以迭代列表
如果ABC等于三一二，那么它将把它渲染出来
并添加二十二个，所以我们保存了它，然后刷新，现在它仍然
只有这四个项目，除了现在满足一个条件，并且允许
我们现在做一些加法，我们还可以有另一个条件，所以如果我
来到这里，想要另一种情况，你可能会想说
类似的东西，但是在Django中，Elif就是这样，这就是我们的方式
会做另一个条件，所以我们现在可以检查其他条件，让我们
只是说它是否等于ABC或单个字符串
因此，如果它等于ABC，我们可以在其中保留for循环计数器
我们可以说这不是网络ABC，我们可以通过一些不错的方法
条件，你可能想知道这到底是什么
这里发生的事情实际上称为内置模板标签过滤器，因此
这些项目中的每一个都称为一个，这是一个上下文变量
但是它本身就是模板标签，就像渲染特定的东西
到Django模板和模板引擎，而这一切都是
它在这种情况下起到了非常基本的作用，我们将对此进行研究。
下一个多一点
到目前为止，我们已经使用了Jango提供的几个内置模板标签
我们使用了extends，这是一个模板槽，我们使用了块，
就像我们使用过的for循环一样，但这不对，实际上我们有很多
如果您看一下文档本身，还有更多的项目清单
您会看到内置模板标签本身，您知道我们刚才已经说过
关于块，但有一个注释，因此，如果您想写笔记，可以
写评论作为模板标签，您可以循环浏览这些内容
尚未真正涵盖，但也许可以玩一下
或者如果您想特别看一下，请在我的评论中告诉我们
不再使用循环了，我将解释为什么
片刻，但是我们看到了循环，包括延伸，因此
我们这里有各种各样的项目，可以使我们的模板做得那么多
更有价值，然后我又嘲笑着另一件事，我们将
现在说说是过滤器，所以这只是一个过滤器
不管这个值是什么，或者模板上下文变量的值是什么
如果您看到两个，其中的任何一个基本上都可以使用过滤器，这是经验法则
大括号，这是一个非常好的机会，您将只能使用管道
然后那里有一些过滤器，是的，有一种方法可以使自定义过滤器成为
好吧，如果您有需要的话，请在
注释，这里是内置的过滤器参考权利，因此我们有各种各样的
不同的值请注意，您可以添加数字，甚至可以表示一个字符串
一个数字，您可以添加变量，因此，如果您传入其他上下文变量
而您想将它们组合在一起，您可以做到，我们可以做类似
先说斜线或盖帽，先说盖帽
例如在这里，我们将我的文本更改为正确的标题，然后返回
我们实际的模板，我们将其更改为标题，让我们开始吧
并把它带到h3标签中，我们将标题放在这里，然后我们将使用它
首先关闭过滤器盖，然后关闭h3，然后执行所有操作
它可以确保我们将第一个文本项大写，所以如果我说ABC
这刷新了，幸运的是，文档现在给出了
我们有很多使用这种权利的例子，比如我什么时候会真正使用价值
中心的正确性，所以如果我想使用中心，我可以诚实地说我不认为
我曾经用过这个模板标签，这就是为什么有文档的原因
但是让我们继续使用Center并尝试一下，如果我刷新糟糕，我们有两个
里面有多余的花括号，对此感到抱歉
居中实际上因为模板如何对我们没有任何帮助
工作，但你知道，所以我的意思是我认为HTML确实有多余的空格，不是吗
什么也没做，所以它什么也没做，但是你能做的是你可以
绝对一次使用两件事，所以我可以先说个营地，这样我就可以过滤
首先像它那样扎营，但是也许我们使用大写字母
上部如此斜杠上部，而要做的就是将首字母大写
然后所有其他大写字母都可以，因此我们可以堆叠这些过滤器
在一起很好，现在我不确定你什么时候会
像这样将它们堆叠在一起，但是有可能
另一件事可能是安全的东西，所以当你通过时
在HTML中作为上下文变量，我们说我的HTML，我们通过以下方式问好世界：
默认情况下，当它正确渲染时，我想在那里渲染一些HTML
当它被渲染时，它被渲染为纯文本格式，因此实际上并没有
正确呈现HTML文档，因此我们实际上可以在此处使用过滤器
安全，因此我们可以保存它，然后您就可以将其实际呈现为HTML和
还有更多像截断字符或标题的样子，嘿
那很酷，所以我们该怎么做，首先要有帽，然后是标题
所以标题和标题是标题，标题是他们的全部标题
正确的变量，所以无论变量是什么，这都是变量，
然后，一旦将这些管道放到那里，它就会变成过滤器名称，并且
可能很酷，所以我们可以花点时间直到使用日期为止
比我们所处的位置更先进，您可以更改时间，可以更改
您可以正确剥离HTML标签的时间格式，所以我们在这里看到我们刚刚剥离了
标签，如果我没有剥离标签，则可以安全保存它
刷新嘿，您去那里不再显示hTML是什么
这些是彼此相反的一种，实际上使另一种呈现
只是摆脱了这些，它们在模板内部非常酷，非常有用
自己slugga phi hey，那是另一个真正的
冷却一个5个弹头，弹头适用什么效果很好，我们在这里刷新
将仍带有h1标签的hello世界变成它的低级版本，或者
像网址安全版本一样，但我也可以删除标签，然后再打个招呼，
嘿，您知道什么删除了所有这些HTML标记并将其固定在
同时，因此无论何时您都想转到该文档
想像嘿，我需要做XY或Z，因为它们非常特定于
通常来说，您使用的是正确的，因此，如果您拥有用户生成的内容
并且您希望他们的标题显示为标题，那么您可以这样做，但是
老实说，您可能会保留原样，因为您可能不会执行这些操作，
这些模板标记真的很酷，因为您获得了
选择并选择何时要使用它们我实际上并不认为您会使用
最终会非常诚实地使用它们，因为正如我们在这里看到的，我向您展示
它们存在，但是通常当您具有这样的值时，您将在
视图，或者如果您有类似的东西也可以在视图中执行
实际上，安全本身应该在视图中使用称为标记安全的方法来完成
但这实际上不是我们要涵盖的内容，但这只是一点点
更高级，但值得一提的是，对于Django来说就是这样
内置模板标签和过滤器，现在我们已经准备好开始渲染
内容从我们的后端，因此实际上已经存储在我们的数据中
数据库
现在是时候从数据库中实际渲染数据了，但是在我们这样做之前
我们只需要在外壳中玩一下，以便我们了解如何
实际上首先访问该数据，然后再将其渲染出来，以便
访问它，让我们继续前进，跳入我们的终端，我就在我的根
管理类型是我的初级项目，我的服务器确实在运行，但是您却没有
一定要这样做，让我们继续进入Python组成的UI
外壳我也假设您拥有这个确切的模型，我们的产品模型是
可以有您想要的任何型号，但请确保您有一个型号，我要去
提前从产品中导入顶级模型可以导入产品
因此，如果您不熟悉这些导入的工作方式，则可能需要返回
一点点，但基本上我们要从该模型中的那个应用程序开始
大量的模块模型模块，然后我们导入产品并
得到任何单个产品项，我们可以做得到对象的产品，然后
我们想在此处使用像参数这样的ID费用，所以ID等于1我按下Enter键，
找回那个对象是什么，现在我可以将其设置为变量本身，这样
假设哦等于J，然后在这里我可以做类似的事情
dir obj来查看我实际上可以在此右侧命中的所有不同内容
因此，还有其他一些直观的方法可以做到这一点，但这也许是
如果您熟悉Python，这是一种自然的方式，您只需使用dir即可查看所有内容
您可能在此处拥有的方法或您可能拥有的属性
在这里，其中之一是ID，其中之一是价格标题摘要，所以很多
这些是我的模型所独有的，当然，数据也来自
在这里，以及Django在模型中拥有的许多内置功能。
如此现实地建模，您可能会做obj点标题或类似的东西
正确的行，因此obj点标题对于该模型是唯一的，它使我可以抓取
我已经保存在数据库中的标题，所以现在我们有点理解了
希望您想知道如何实际获取一些数据的更多信息
我到底从哪里来的，这个get呼叫将在
一点点，但让我们继续前进，暂时退出外壳，让我们开始吧
继续并创建我们要渲染实际数据的第一个视图，以便
无论这些数据是什么，所以再次在产品应用程序中打开我的视图
我的意思是我将其移出另一人的视野的原因（如果您已经
一直遵循与全权有关，所以你想
确保与您的产品相关的所有内容都在您的产品应用内
因此，如果您渲染的视图与一种产品相关，
可能在您的产品差距中，但有例外，但请保持
考虑到这一点，所以我在这里要做的就是说死亡，我将其称为
产品详细信息视图，无需过多解释即可，
我有这样的命名约定，例如产品下划线详细视图
要显示一种产品，这就是我们所说的详细视图，我将继续
向前并在此处放置请求，然后返回render并花费
请求一些模板名称，然后请求一些上下文，因此我们当然必须创建
我们的模板本身，让我们继续写产品斜线详细信息HTML
对，所以如果您一直关注我，我现在确实添加了一个斜杠，您还没有看到
但是，我们将在片刻之内讨论这一点，接下来的事情是
在这里的实际情况下，我将继续从点模型开始
在这里进行相对导入，以便从蝙蝠模型导入产品类，并且此
有时候人们会首先得到一点点，然后他们可能会命名为
像类一样起作用，所以不要大写函数使它们再小写
您可能会在此处放置类似产品这样的东西，但这并不是一个好主意
确保它是明确的，所以我们正在查看产品的详细信息
这就是为什么您要将该产品视图放在此处的原因，就像在
壳，我们做了产品，我得到ID的对象等于一个，现在有一个
很可能这对您来说是一个错误，我将解释为什么我们跳入
管理员，让我们进入我们的管理员，然后进入我实际拥有的产品
这里有两种产品，您可能会有更多的选择，或者您可能有零个选择
但是我的模型实际上在这里有一些项目，所以如果我单击第一个项目，
看到这里有一个数字，实际上是我们也可以查看的ID
其他产品就是另一个ID一二，但是如果我们看一下我们的模型
这里没有ID与Django的内置功能之一相关，
它们是它具有一个自动递增的ID，您可以在迁移中看到该ID
在初始文件中，我们看到有一个自动填充的ID，因此它会自动
为我们创造了一个我们不需要做任何事情
Jango的另一个胜利，好吧，我如何实际在此处创建上下文
所以默认情况下上下文只是一个空字典，什么上下文
我想在这里放好吗，我可以放一些东西，例如标题，再说一次，就是obj
标题，我可以放置诸如description和obj点描述之类的内容
您可以填写其余内容，以显示在模型上
上下文再次进入我的模板，但实际上我必须创建该模板
因此无需深入到我们可以找到或加载我们的位置的地方
我将在下一个模板中逐字讨论的模板
在此模板文件夹中创建一个新文件夹，这里称为product并在其中
该文件夹将创建一个名为HTML的新文件，仅此而已
如果您想在模板中包含目录，则必须这样做
只需在其中创建一个目录，并确保您添加该斜杠就可以了
这样的斜线无论您在哪个系统上都应该可以使用
好的，很酷，我们已经详细介绍了HTML，并且我们想扩展其详细内容，以便
基于HTML扩展，这当然是从先前的视频继续的，所以请使
确保您观看了这些内容，并且我们确实屏蔽了内容，并且我们仅在其中屏蔽了我们
按照我们创建的标准
模板，让我们继续并确保将视图导入到URL中
因此，在我们的网址中，我们将继续导入产品视图，以便它们来自
产品视图导入产品详细信息视图，即该视图的名称
当然，最后我要继续前进，在这里开辟一条新路，
我们将其称为“产品”，它仅包含产品详细视图
我要继续在这里做一个h1并说出项目没问题，让我们回去
进入我们的项目，如果没有停止的话，就进入产品冷却阶段
去检查代码对github做所有的事情，就像我只是轻轻松松地通过很多
事情，因为我们已经做过了，但是我们还没有做的是看到如何
实际渲染出一些对象数据，就像这样的一些数据库对象数据
案例我实际上已经做到了，所以您可能已经直观地知道了，我可以
只要在这里做大括号标题，然后我就能知道类似P的东西吗
标记说明在这里，等等，好的，保存它，刷新在这里，我们有一个新的
产品看起来像我没有描述，所以我不必担心
关于这一点，但是当然这是一个使用条件的好机会，我们可以
说如果描述，然后我们将呈现描述，否则
我们会说即将到来，或者可能会说类似描述即将到来
很快，它们真的很完美，如果描述不是全部，那么我再次是你
可以在这里完成各种类似的条件，这些条件也可以在Python中使用
这些是Python条件，或者抱歉，在这种情况下不一样
它实际上不等于无，所以我们要说的是，描述也不是
等于一个空字符串，很可能是
而且还有更多有趣的地方
对于观看这些教程和
建立一些真正的好东西，现在我们已经得到了我们已经实际渲染的东西
在我们的模板中，我们已经渲染了一个对象，但是有一件事是
这种方法确实不利，所以如果我们回顾一下自己的观点，
要做的是我必须正确映射我的对象上下文，以便其中的每件事
我的对象意味着这里的每个字段，我都必须将其映射到上下文
本身还可以，但是它增加了一个额外的步骤，例如，如果我更改自己的
模型，或者我想在HTML中包含新数据，我也必须进入视图并
这有点低效，所以我们要做的是代替全部
这只是摆脱它，或者让我们评论一下，我会留在那里
供大家参考，所以我们做到了，我们说对象是obj，因此
现在上下文对象是对象右，所以上下文变量是对象，所以
在这里我们的细节里面，我们可以只做对象ID标题对象
描述对象描述对象我们的描述是的，我会保证
我将不再重复该操作，然后再对点价格进行调整，现在我可以
实际在需要时更改模板，而不必担心太多
这个详细视图对吧，哦，我们得到了一个错误，发生了什么事，一个对象
标题发出的名称就是标题，所以对象应该在其中
渲染，但也许我们没有保存我们的视图，我们还不好，所以现在
从数据库中渲染出所有东西真的很酷，当然您
可以玩改变事物做的所有事情
您可能还记得，当我说要创建Django应用时，您会
想要在该应用程序或组件内部保留尽可能多的该应用程序
在执行此操作时，目录就可以使事情变得简单明了，这样您就可以
在其他项目中使用该应用程序通常是我的目标，如果您
真的非常好的博客应用程序，例如，您可以反复使用它
甚至将其作为第三方软件包发布，供其他人使用
好吧，如果您最终这样做了，那意味着您将不得不做
额外的配置，现在这给了我们一个非常好的
有机会在这种情况下谈论模板，所以我故意离开了
因为我想向您展示如何渲染有关该应用程序的一些数据
首先，然后现在在我们的应用程序内部移动模板，我们实际上可以
在此处称为模板的新文件夹中放置一个子文件夹
可以在这里有一个称为模板的新文件夹，您可以在其中进行操作
其中，我们可以创建一个新的另一个新文件夹，那里的新文件夹是
将成为我们应用程序的名称，因此就像在此模板中一样，我们做了产品
详细信息，我们将在此处执行相同的操作，实际上，我们将其确切命名
就像我们的应用程序一样，在我的情况下，我首先生产产品，所以我将其命名为两个
产品，然后我们将此产品称为下划线明细点HTML
我们已经更改了模板的几项内容，我将其复制并粘贴
整个模板本身带来了它，因为我们会看到一些区别，所以
我要在应用模板中用这个标题来称呼它
用于说明在理解Django查找方式方面的差异
模板本身，因此我们将其保存，并在我们看来将其更改为
产品的详细信息不是确切的，因为我想向您展示一些东西，
可以跳到完全一样，但是我想给你看一些东西，所以如果我
保存，将要发生的是，我已经将此页面呈现出来，并且我得到了
错误说模板不存在，所以这实际上对于
可以理解，因为很多时候您将模板放在错误的位置，或者
有拼写错误或类似的内容
这使我可以看到发生了什么，我们已经有了这个脾气模板
loader向我展示了它实际上是如何加载我的模板的，所以第一件事
它寻找的是文件系统加载器，在这里信不信由你
来自我们的一种设置，所以如果我们进入该主要配置设置
而我们实际在何处设置此模板der就是那个
所有这些都是这样，如果我实际写出了将出现的路径
因此，如果您使用的是错误的系统，则会在这里看到错误的路径
因此，我们将其变成这样，接下来的一件事是，您将在其他地方看到
它看起来像在Django站点包中，它贡献了管理模板
产品详细说明了它在Django内置的管理应用程序中的外观
最后，它进入了实际的应用加载程序，因此看起来
在我们自己的应用程序内部在产品模板内部产品详细信息当然
这不是实际名称，我们将其更改为产品下划线
细节，所以如果我保存并刷新一切看起来不错，但让我们保留它
暂时了解产品细节，然后发现它实际上有多酷
所以我们实际上要在我们的内部查看Django包本身
现在，请记住，我们不想在此处更改任何内容
我们只是出于说明目的查看它，因此我们进入
Lib Python 3.6站点包django只是单个django，没有别的
然后我的意思是，如果我们追溯正在发生的事情，我们会看到contrib admin
模板，因此可以创建管理模板，而实际上还有其他模板，让我们
看看这个管理应用程序本身，这实际上与
我们拥有的肯定比我们拥有的更多，因为
我们仍然在做很多基本的事情，但是我的意思是在某些时候你可能不会
曾经有一个包含这么多东西的应用程序，这就是
并不是重点，这是完全一样的
它是与管理员或内置应用相同的Django应用，
我们正在做的事情非常酷，因此您实际上可以看到模板和
您可以在此处进行编辑，但实际上您不需要做的是
您想覆盖任何内置模板或任何应用程序
模板，如果您想覆盖这样的内容，则只需
将它们放置在文件系统中，然后将它们放置在此处
相同的路径，所以让我们继续前进，将视图更改回实际的位置
因此，它的产品会写出产品详细信息，这就是我们想要的一切
因此，如果我想覆盖它，我们现在看到它在应用程序模板中显示
模板或这些应用程序中的任何一个的模板，我都会进入
我创建的主目录的模板文件夹，我将重命名或添加
我之前使用的路径相同，所以我将其重命名为产品详细信息
所以现在它完全改变了刷新的位置，我们去了，所以
实际上向我展示了og模板，这就是您要做的事情
这样做，但请记住，当您使用自己的单独应用程序或
你有一支团队的机会真的很好，你想把它留在里面
本身，所以我实际上要完全删除该文件夹
真的希望您对此感到困惑，这就是为什么它消失了，但我只是
想要说明所有这些如何与您一起使用的目的
模板以及如何加载它们，我认为至关重要的是
在地图内部与其他任何形式相比，因为有关此方面的所有内容
此时的产品应用程序位于其中，URL除外
实际上将其引入Django项目本身的过程，但这还不是全部
对于我们的任何应用程序都不同，包括内置的类似admin应用程序（如果我知道的话）
摆脱这个问题，对于Jango来说，该应用程序将不再适用，我的意思是它仍在运行
但是我们的主项目无法再访问它，这意味着它是一个
可重复使用的应用程序，这就是我们要保持的主题
您会看到我们实际上希望能够允许我们的用户将数据保存到
数据库，他们实际上不会使用admin或Python shell来做到这一点
所以我们将要分解使用Django模型的基础知识
表格，这意味着什么，让我们现在实际上看一下其中的任何内容
给定的应用程序，我将继续在此处制作一个新文件，并称其为饼图形式
请记住，这适用于任何模型，而不仅仅是我们正在使用的模型，因此
我们将继续从Django导入表单中执行操作，而它们将从dot中执行
我们将要导入模型的模型，在我看来，这是产品权，
然后我要在这里开设一门新课，我将这个课称为产品
模型表格，或者我真的将其称为产品表格或产品创建表格
这些是您可能最终会用到的几个不同的名称，所以我们就离开
它以产品形式出现，我们称其为点模型形式，而我们所要做的就是
这里要做的是做等于产品的类元模型，然后是像
我想在这里拥有的实际模型字段就像您知道哪些
这些我想很好吗，就是您的头衔，说明和价格好了，所以头衔
然后描述，然后价格确定，所以我们现在拥有我们拥有的模型表格
要做的就是在视图中渲染出来，让我们进入视图并导入
因此，从点表单导入产品表单，我将提出一个新的观点
专门为此，我将快速复制此详细视图，我们将
将此产品称为“创建视图”，我不会担心对象本身的问题，因此
我想要的上下文是，我只说形式等于产品形式，
然后我们只用请求点发布或不初始化它就可以了
如果您不了解一些视频或此处发生的情况，那将是一个问题。
接下来的几段视频我们将在这里进行更深入的介绍，所以请耐心等待
和我在一起，如果表单点有效，那是另一个
我们最终会做的事情我只会做不安全的事，然后我就去
继续，然后在此处添加此表格到我的上下文中，我将制作一个新的表格
所谓的产品创建CH tml，这意味着我需要制作该模板
本身，现在您应该绝对知道该怎么做，并且
简单的方法就是复制其他模板，然后在
在这里，我需要创建一个表单元素或一个表单HTML元素，我也要
做输入类型等于提交，我们说值等于保存不
关闭它，然后在里面将形成点P，所以这是一个
内置方法将我们作为上下文传递的形式转换为实际形式
用段落标记呈现的HTML表单，我们将在
片刻，但是现在我们有了这个很棒的视图，让我们实际带上它
进入我们的URL，所以进入URL会将其导入，我将继续进行
一个新的路径，我将其称为“创建”，它将
是产品创建视图好吗，再次确保所有内容
保存了所有的表单模板，所有这些东西让我们继续
并查看此创建，然后我们开始将表单呈现在此处
加上我们指定的实际字段，所以我只想说这是新产品
很棒，有些价格合适并不重要，我点击保存后得到了一些
错误在这里，所以我已经把这些东西放在这里，这不是一个真正的错误，它是
只是我实际上没有指定我在表单本身上使用的方法
所以回到我的模板，我们将继续说form方法等于post和
我们还将添加此CSRF令牌
好吧，当我们分解并开始时，我们将绝对讨论这些事情
从最低限度来说，我只是想向您展示如何做到这一点，
激起您的兴趣，以了解更多有关这一点的知识，所以我
在这里刷新，让我们摆脱URL中的所有内容，我将做一个
再次使用新产品，说明是否重要
价格$ 12.99还行，所以我得到了这个不为null的约束，但失败了，所以我
这里有一个错误，那是因为如果我们看一下我们的模型，让我们看一下
我们有这个功能，这是必需的，不是空白，这就是
错误的发生这种错误一直发生，这是我的一部分原因
实际留在那儿以便实际克服这个问题
要做的只是添加默认的true或false的那一部分
没关系，但是我们对模型进行了一些更改，所以我们该怎么做Python
Michelle Py进行迁移，我们希望确保我们是我们的根源
我们是python manager py的项目，使py迁移并使用python manish
迁移好吧，让我们再试一次，我们会说新产品或新课程
其实什么都没关系，就像我说一百万遍，然后继续保存
那我不知道实际上是否有任何变化，所以让我们进入
管理员让我们登录那里进入我们的产品，您知道什么
好像我有更多产品，所以我在这里修了新课程，然后又新了
当然在这里，所以我实际上保存了一些不同的数据项，因此一种方法
解决问题的方法就是弄清楚里面有什么，这很简单，我们
只是回到我们的视图，然后像这样重新渲染它，这样我们就可以
只需重新渲染表格，然后上下文就会为我们更改和更新，因此
让我们继续吧，我们可以从字面上暗礁提交相同的数据，我们会收到此错误
这是一个安全问题，或者不是安全问题，而是安全功能
因此，让我们继续前进，然后再添加一个
我们节省的一些价格为我们清除了表格，我们进入了后端
而且您知道我们那里有我们的产品吗，我很酷，所以我们现在有一个
模型论坛，所以在接下来的几段视频中，我们要做的就是打破常规
这要深入得多，例如我实际上是如何从中构建HTML表单的。
从头开始并了解我们将要开始的数据，然后我们将获得
越来越复杂，以便更好地了解表单的总体工作原理，
然后更好地了解他们如何与Django合作，因为这肯定是
不是唯一的方法，但是即使感觉不到，这也是一种相当简单的方法
就像这样简单，我保证这是一个相当简单的方法
现在，我们已经创建了此产品模型表单并将其呈现在
我们的产品创建了，现在是时候退后一步，并从
像原始HTML一样从头开始，然后向上移动链条，所以第一件事就是
我要做的实际上是摆脱与Django相关的内容，所以这两个
现在一切正常，所以我们这里只有一个HTML输入，那就是
保存它，所以我要实际输入的第一个输入是输入类型
等于文本，名称将成为标题，就像我们要调用的名称一样
输入的内容本身就是名称，因此可以使用标题I
可以说我的头衔但这两个头衔都没有太大的不同
我们稍后会看到为什么，所以我们得到了输入类型文本的名称标题，我们可以
还添加一个称为占位符的内容，我们可以说您的
标题，这只是为他们提供一些信息，我们将看到这是什么
只需一分钟，好吧，下一件事就是视图本身，我将继续前进，
对此发表评论并创建一个全新的评论，仅将其渲染为空白
上下文，并且没有与表格相关的数据，所以我们真的对三个您都知道的事物进行了评分
大量备份并重做此视图，所以我们来看一下，然后看一下
视图，让我们继续前进，并在create中对其进行查看，我们已经为您提供了
如果我输入ABC并单击“保存”，则在此处显示带有“保存”按钮的标题，得到此CSRF
验证失败了，现在为什么会这样
好，这实际上与我们的方法有关，所以如果我更改该方法
为了得到发生的事情，我刷新并说ABC命中保存它看起来像某种东西
发生了，但您可能已经注意到，URL更改了，您看到的是get方法
表单的默认方法是什么，所以如果我只键入一个表单，例如
这并渲染并说了别的话
它将更改实际上与您想要的URL类似的URL
在您的网站上进行搜索，而不是进行搜索，您知道会进入
我们要做的事情就是保留这种发布方法
好的，所以我们保存并刷新，然后再次尝试ABC，我们仍然禁止这样做
再次，这与Django现在内置的安全措施有关
原因的很大一部分是所谓的动作，所以如果我们键入
动作，我们将其设置为另一个网址，就像斜杠搜索一样
然后继续进行操作，然后输入该方法，然后输入
在这里刷新，输入ABC命中，保存哇发生了什么事，这使我进入了
不同的网址以及您所知道的其他网址，包括我
实际上采取了行动，那么意味着他们可以将其发送到一个完整的
不同的网址，如果我对Google做同样的事情怎么办，所以wwq Google
平静的斜线搜索我实际上要摆脱那里的斜线斜线，而我
也要在此处更改名称以提示，然后我只说您的搜索
我们将其保存，然后在这里刷新，我们将为您提供搜索，我会做django
CFE命中保存嘿，您实际上了解我什么
在那里进行了Google搜索，Cody French很酷
布鲁斯上来了很多很棒的东西，我喜欢这样，但是更重要的是
重要的是要了解我刚刚创建了自己的Google搜索表单
这对某项功能确实很不错，但其他部分在这里都不是
与Django有关，所以您实际上学到了第一件事
操作会将表单发送到您现在放置在此处的任何URL，如果我们实际上
更改此方法以像这样发布并现在搜索
Django CFE让我们在这里刷新，然后搜索该命中保存，我们得到一个
405错误，请求方法发布不适用于此URL，因为
希望有道理，如果没有，我会在稍后解释，但这很漂亮
很酷，我们实际上可以更改操作，现在我们可以更改方法
默认情况下，操作将转到当前URL，因此如果执行句号
在这里，您可以将其视为空字符串或句点，无论是哪种方式
这个URL是什么很好，然后将使用该post方法
再次，我们将其更改为标题和您的标题，然后我们
保存并执行ABC，然后点击“保存”，然后再次接到该被禁止的电话
再次，为了解决该问题，我们做了CSRF令牌，所以我们保存了该代码，
在这里刷新，确认重新提交表单，现在我们可以说是
再试一次，我们走了，所以它实际上消失了，所以数据
似乎正在经历现在到底发生了什么事
现在git request的意思是您转到任何URL，所以当我转到任何URL
在我的页面上就像是关于联系，无论您从中获取什么信息
当您想在后端保存信息时，我们会使用类似
邮寄给您的信给您，这很相似，我们只是
现在使用两种不同类型的请求进行操作
并没有太大的不同，例如后端可以处理两种类型的数据
我们在实际视图中可以看到的方式相同，因此我们的视图本身具有
内置两个方法，因此如果我们对打印请求执行dot get和print request
点发布，我们实际上可以看到发生了什么
如果我只是刷新页面，请使用get之一
在这里，我看到我有这个查询字典，它是空的，我可以
实际上，是说您知道标题等于正确的东西，所以我现在知道了
更改了我的获取请求，因为我更改了我的网址，现在可以在此处看到
我有一些数据从那里通过，所以这是一个实际的
我可以说得到点得到的字典，或者您知道抓住实际的项目密钥
值对，它将打印出我在此处输入的所有标题，因此如果我
说是的，这是一个标题，它实际上会在
后端很酷，所以是的，您可以绝对保存该数据，我不
建议使用git是不安全的方法来保存数据，即
为什么有用于邮政的安全功能，而这不是Jango独有的
当然不是任何Web应用程序都独有，这是它的一般规则
大拇指到您有帖子时要添加一些安全性的原因
就是如果我要在网址中有这个标题，那么就是黑客或其他人
可以使用链接将其更改为类似这样的内容
从字面上改变标题对我来说，它开始带来各种各样的
您可能有的安全问题，而不是我们使用请求
发表正确的，所以我要摆脱这部分的get调用，然后在里面
我的表格仍在邮寄中，所以我可以摆脱所有这些，并进行ABC命中保存
现在我看到的是所有这些数据通过
非常酷，这意味着他们将在这的最后一部分中，我可以
进来，说title等于要求获得标题的帖子，而我
使用doget字典本身来获取其中的内容，这将
是我要使用的标题，然后我实际上不会保存它
因为我不想把所有信息都放进去，但是如果我做了产品点
创建标题的对象等于我的新标题，所以我的新标题然后
我在那里有其他所有领域，然后可以继续进行实际保存
请求的过帐数据，仅通过打印该数据本身来表示
并在这里摆脱这些请求方法，这样就可以保存ABC并保存并
到这里，我们已经打印出了标题，让我们继续保存
再次尝试，再尝试一次不刷新ABC，我们点击“提交”，我所看到的一切
刚开始是ABC，现在我什么也看不到，为什么为什么在那一刻我什么也看不到
首先是因为默认情况下我们没有任何发布数据，所以有很多
在这方面，我仍然需要深入研究的东西，但我只是
向您展示了如何在Django中编写原始HTML表单，然后
通常，您将如何从中创建数据
可以做的是说，如果请求点方法等于发布，那么您可以运行
通过并做所有这些事情，没关系，所以这要求
方法，无论该方法是什么，都会给您带来便利，或者您可以
其他HTML方法，然后您可以继续保存它，然后在
您在该页面上刷新时，它不会像说的那样先说没有，而是
只会渲染ABC，说没有，因为我复制并粘贴了
但是让我们点击很多，然后说明一点
我刷新该页面，我收到了我的请求，我保存了ABC，但我得到了我的帖子
请求和实际的发布数据很酷，因此，如果您根本不清楚，则可能需要
要进一步了解HTML表单本身，请在
注释，但这确实是一种糟糕的保存数据的方法，真的很糟糕
因为我们根本不验证这是否是好数据，
清理这些数据，以便我们确保执行此操作，这是另一个
我们需要讨论的主题，我们将在下一个主题中进行讨论
嗯，所以我实际上将再次对所有这些内容进行评论，然后将其复制并
粘贴它可能应该先复制它，但是
你知道什么都可以，所以我再继续
删除所有这一切，因为我们基本上是从零开始，或者好像
从零开始，好了，所以我在这里有一个视图，然后我想打开
表格再次继续，现在暂时忽略它，但这还不错
参考，所以我将继续讲讲原始的产品形式，它会吸收
形式点形式，因此它不是模型形式，而只是标准django形式，因此
标准的Ginga表格，我们必须声明我们的输入，因此就我而言，
使用模型，但我可以做得更多，我们使用表格字符字段，您
知道我们可以说描述，我们也可以做char字段，然后
我们会说价格和小数点形式的表格，所以它们看起来应该非常相似
到我们的模型，那是因为它们是，所以我们有十进制字段char
字段，而我们实际上没有文本字段，因此，如果您尝试输入文本
领域是行不通的，我稍后再讨论，但是我们会做
char字段，说实话，如果您想参考一下就可以了
Django表单字段，它应该在此处为您提供字段类型
好吧，所以表单字段所有各种字段类型都在这里，所以您
可以绝对使用其中任何一个，但是您知道文本字段不存在，所以这些
默认情况下都会渲染出特定外观，因此，如果我抓取此表单，请带上它
回到我的观点，或将其带入我的新观点，现在我回到它，我们有了
渲染出此表单，以便渲染出来，我们创建了该表单的实例
所以我们要说的形式是，这可能会创建该形式的实例
熟悉Python以及如何从类创建实例的过程中，我们添加了该表单
在我们的上下文中好吧，所以我们可以在这里再说一次我的表格
然后在那里形成表格，我们仍然要关闭该产品创建的过程
在该HTML中，我将在这里删除它，只将点形成为P，
这会将其呈现为段落文本，所以如果我们保存它并看一看
让我们刷新一下页面，我可以检查元素并进行查看，
看到嘿，我们有自己的表格，我们有一个动作，我们有我们的CSRF
中间件令牌，即安全令牌，我们在此处有一些P标签，即P
这些就像HTML一样，或者不是HTML，而是Li或ul
是的，是的，所以您可以将其渲染为UL
HTML就像HTML那样有意义，但是SP是一种现在就可以呈现它的方法
我们有一个包含一些数据的表格，所以我可以添加任何我喜欢的内容并点击
现在自然保存，刚发生的事情是我们将数据提交到了表单
在这里或至少看起来像我们做了，但我们没有，我们什么也没做
对，所以这个表单本身只是渲染而已，实际上并没有
这些数据中的任何一个，这就是为什么我们在这里使用请求点发布的原因，所以如果我将其保存下来
照原样在这里刷新，这只是本页面的刷新，我看到了
现在它给了我这些验证错误，这些称为验证
错误，这太棒了，它已经内置在Django中，它已经
对我来说，验证内容不同于HTML，HTML绝对不是，但是它是
很好地询问为什么我们的验证错误甚至会在此发生
指向正确，所以我们看到此字段是必填字段，但是Django已经如何
知道它与我初始化的内容有关，所以我将其作为
要求发布信息，因此一开始我们将使用很长的路要进行这项工作
说如果请求点方法等于等于发布
所以再次将其内置到要传递的请求对象本身中
该方法等于发布，那将是我将实际使用的表单
表单中的数据，换句话说，我将传递该请求后的数据
初始化我的表单，所以我还必须默认情况下初始化表单，所以我需要
一个get方法，这就是它的用处
正确，所以我将其呈现给get方法，以便可以看到它的外观，然后
使用post方法，这是另一种类型的请求，这意味着
我仍然必须为不同类型的请求渲染它，所以我们已经
这大概是正确的请求，所以默认情况下就是这样传递的
但我收到的要求可能没有任何内容，因此我们将继续并离开
出来，现在这实际上将处理我的表单数据，所以如果我保存此
然后在这里刷新并点击保存，现在说请填写
表格，该表格基于我的浏览器，并在其中显示要求
如果我实际上删除了该权利，那么我实际上将其从代码中删除了
您不必执行此操作的元素，这更多是出于说明目的，
打保存它只是移动到下一个，所以我再次删除它，然后
最后所有这些要求的最后一个，将其删除，然后我立即点击保存Gengo
正确地为我进行了验证，因此我实际上向您展示了一种用户
可能会破坏您的某些原始HTML表单，这就是Django
安全不仅用于此，而且也用于此权利，因此我绝对需要
所有这些事情都起作用，所以我需要所有这些字段，这是一个
实际验证它的方法，它执行验证，所以有一种方法
打电话给我，如果我的表格是有效的，实际上会说嘿你有一个有效的
现在您知道数据是好的表格，我将在下面的内容中解释数据部分
第二，但是既然数据很好，我们将继续打印我的表格点
清理和数据，所以这将是
实际上是从表单中获得的，经过验证之后，然后
我们还可以说打印，否则我的表单错误，所以我们有了这两个
不同的方法，所以如果它是有效的，那么它将在无效的情况下执行该操作
然后它会打印出那些通常不会出现的错误
一定需要这个，因为我们已经看到的表单本身会呈现出来
可能与该表格有关的问题是因为
就在这里，所以这里有很多内置功能，我们只是
尚未完全分解，所以让我们继续看一下
让我们实际输入一些有效数据，以便我们回到这种创建方法中
说ABC，您知道我要保存的任何内容，而该表格没有任何内容
重新渲染将在一分钟内解决该问题，但如果我们查看一下
终端，我们看到嘿，这是我们的干净数据，它实际上为我们提供了这些数据，
由于我们重新提交了表单，因此也会显示该空气列表数字
那里有一些错误，所以我们可以做的另一件事是您
知道可能会引起一些问题，如果我改变这个价格怎么办
如果我去检查元素更改，它会在实际情况中更改类型
HTML可以文本文本，所以现在我可以实际输入文本了
输入要打的文字，保存，嘿，一定要有一个数字
所以这是其他内置验证，我们的表单实际上是正确的，因此
这些数据让我们实际保存一个对象，让我们实际执行您所要做的事情
最终会做对，我们就有了一个可以创建对象的产品，
有一些通过正确的数据，我们有一个字典
这些数据，它正在做标题描述和我所命名的价格
我们表单上的那些字段是故意匹配我们的模型的，
那也是您应该做的，因为我们再次为此努力
模型的形式，我们正在做很长的路要走，我们对什么是更多的了解
这样下去，现在我已经知道了
在这里创建好了，如果我实际上只是传递了该数据怎么办，让我们开始吧
像这样那样在这里传递干净的数据，所以我要创建它
从这些干净的数据中，让我们回到这里，我会说一些新标题
描述您知道我节省了一些价格，但我得到一个小时的错误
在这里，所以我们可以做的实际上是在这里使用两颗星
把它变成我们将要通过的论点，所以让我再试一次
保存没有错误，让我们看一下我的后端，我有一堆新的
具有相同名称的产品很酷，所以我实际上能够节省一些
来自我的原始Django表单的数据为我做了一些验证，现在有
我们可以在这里设置的参数和东西肯定还有很多
我们可以处理这些字段，包括渲染此描述的工作方式
所以在下一个中我们将进一步介绍
现在我们要做的是与任何单个领域相关的事情，例如
比方说，例如，您希望某个字段不是必填字段，或者您想更改
它的标签或其中的任何输入默认情况下，所以如果您看一下
根据您的形式和他们自己，我们可以非常轻松地更改很多事情
您希望很好地填写此字段，只需输入必填项true或false
正确的标题，我希望它是必需的，这实际上是
默认值，因此您不必写出默认值是否为
是的，您现在只是说假，当然，您可能想知道我该怎么办
知道默认值在哪里，当然是文档中的描述
核心字段参数将告诉您默认值是什么
默认为true，它位于此处下一个正在更改您的位置
标签，因此，如果您不希望标签成为纯标签，只需将其设为空字符串即可
这是一种非常简单的方法，就像价格一样，您也可以设置
初始值，所以初始等于2，例如1 9999好，所以
这是将这3个初始参数更改为任何给定的简单方法
这些字段之一，如果我在这里刷新我们就去
它实际上向我们显示了这一点，因此更具体地不一定
令人耳目一新，但只是在页面中前后移动，这个数字是
实际上在这里，所以我们在这里可以做的事情绝对更多
就像注意到我没有任何占位符一样
说明本身不会呈现为文本区域，因此让我们
首先进行说明，然后通过覆盖
通过放置小部件等于两个表单点文本区域的默认小部件，仅此而已
我在那刷新了一下，它给了我一个文本区域，您现在可以查找所有各种文本。
表单文档中的小部件，因为肯定有一个
很多在那里，你可能最终会改变
诸如textarea之类的东西，也许您想要更大甚至更大
更改为该特定输入，然后我们将一些括号括起来
这里的属性等于另一本字典
所以既然我真的要压倒很多，我就继续
分开一些，这样我就可以更清楚地了解这里发生了什么
我可能拥有的第一个属性是类，例如您可能想设置一个新的类
这里的班级名称也可以是新班级名称或多个班级
您还可以在此处设置行数，所以说我们做了一个
一百行，我刷新了，嘿，那是一个很大的论坛，当然那是
可能不太可能，也许您做的事情更多，例如20，而更大
文本区域，当然您也可以进行列操作，当然，如果我
在这里检查这个元素，我发现嘿，我在这里有个名字，我有两个
我添加的类，然后有一个ID，如果我在此处更改ID，该怎么办？
文字区域的破折号ID
在这里刷新一下，您需要确保在我说的结尾处加一个逗号
这是一本字典，我现在看到它们ID已更改，所以任何
您绝对可以在其中放置不同的属性，并且
这是一种非常简单的方法，现在您也可以在标题标签上进行操作，因此我们
想说我们想在这里放置一个占位符，所以让我们继续
输入表单点文本输入，这是char字段的默认小部件，因此我们
只会将其更改为属性等于两个占位符，
不管您希望占位符是什么，以便您的标题都这样，我们会刷新
在这里，您知道您的标题当然会显示该占位符
您可能还希望将其放在文本区域内，以便您进行描述
等等，这样您就可以覆盖有关的一些基本信息
形式本身也会改变基础的工作方式
至少是必需的权利，因此，如果我尝试保存它，然后键入一些
其他的不再需要描述，因此不再显示
向上标明价格和标题的位置，所以如果我取消价格，
会告诉我填写此填充字段本身，当然是网络
浏览器会这样做，所以如果我做了一些棘手的事情，而我却摆脱了
所需的元素在这里，然后再次单击保存，它给了我相同的
验证，这很酷，但这只是给我们一些提示
验证实际上是什么，所以这部分很好，我们实际上差不多
在这一点上与该产品表格相同
在模型形式呈现出相同种类的东西的意义上是不同的
在这里唯一的区别是视图如何处理它
您可能还记得我们只是做表格本身，然后保存了数据
这实际上是在做同样的事情，所以现在我们可以渲染
为我们的表单确定新的验证类型，让我们继续进行，然后
还有下一个
Django对其字段有很多内置的验证，因此当我们渲染一个
Django字段或Django表单，我们实际上可以提交一些数据，而Django将
检查以确保数据与该内置验证匹配，因此如果我们采用
看看现在要使用的模型表格，我将向您展示
正确地覆盖字段本身非常简单，所以如果我实际带
这个标题在这里，我看到这个名字和那个名字相同，所以
实际上，您如何覆盖默认情况下提供的功能，这是一个很酷的小功能
现在就拥有希望你意识到的东西，而我在上次提到了
一种，但现在这些形式实际上是相同的，它们具有相同的三种
字段唯一不同的是视图如何处理它们
但是我们将继续使用该产品表格本身，所以我要去
继续并注释掉所有这些内容，我们将返回到原始内容
产品创建的视图，我们一直在使用，所以这里有一个快捷方式
我在这里所做的方法，以便请求发布，然后呈现这些
如果发布数据通过，那么所有要做的就是呈现出该表单
否则，我们将只渲染一个空的表单
就在那里好酷，现在我了解到我想做的是
进一步看一下这是有效的相关内容，让我们继续
看起来确保我的表单在这里经过刷新，并且我已经
我的价格是我的必填字段，所以可能我可能需要保存一些
这里的东西让我们确保所有的东西都被保存起来，我们的表格在那里，我们去了。
然后刷新，标题消失了，如果我返回创建页面，它会向我显示
我在那里有占位符，是的，我绝对可以只复制所有
这些东西也都放在这里，一旦我做了，我就会变得更健壮
就我想要它的外观以及几乎我想要的意义而言，形式
如此工作，所以当您执行此操作时，您会意识到您确实做了很多更改
是的，绝对有捷径可做
为我们做了很多这样的事情，我们现在不讨论
因为它有点太先进了，但我要说的是
关于就像我要我的标题成为您所知道的包含某个单词一样
假设我希望我的标题正确包含CF e，以便单词本身或那个
这些首字母缩写本身，我需要在这里输入并说“定义干净”
下划线然后是我的字段名称，所以无论我要成为哪个字段
抓住这个验证就是我想要做干净的标题，所以我想要
确保我的头衔中有一个特定的项目，所以只说一句自我，我们
可以做我们的和关键字我们的那些可能不是必需的，但
通常，如果您不确定何时覆盖某些内容，只需确保您
放置args和我们的关键字，以便获得实际的标题本身，我们做自我点
清理的数据点获得标题没问题，所以这将
得到默认标题，这将得到Jango表格的清洁，因此Jango
将首先清理表单本身，然后将触发该标题
换句话说，这不是必需的，例如，必需的将
绝对仍然在那里，并且要验证这一点，我们将要去
继续说，如果是标题，或者说如果是标题中的CFE，那么我们会很好地返回
想要这样正确地做，所以让我们先做逻辑
因此，如果标题中包含CFE，则无论默认设置如何，我们都将返回该标题
否则我们会做点表格，或者提出表格而不是验证错误
这不是有效的标题，所以我们保存它，让我们看一下刷新
在这里，我会说ABC hit提交嘿，这不是关于
标题有我们的验证，这真的非常简单，我的意思不是
那种先进或复杂的东西，我当然不会写
这种格式我会做的是说，如果不在该标题中，然后提高
验证，现在默认返回该标题的原因是
如果新闻中没有标题，我可以进行多次验证
不是有效的标题，所以ABC空间我们得到了两个不是无效的，实际上
保存并刷新，让我们再做一次
所以我说ABC我点击保存，我知道这不是有效的标题，所以马上
蝙蝠，现在假设我将CFE放在这里，将会提高这一水平
然后再次点击“保存”，就不会再说标题了，所以必须
验证您可能拥有的所有这些条件，当然还有这些
对于标题来说不是现实的，对于
就像一封电子邮件，因此，举例来说，如果我做了干净的电子邮件，而我们做了电子邮件
我将在短短一秒钟内将这封电子邮件实际字段中的内容投入，所以让我们
请继续说，如果不是，或者说电子邮件是否以该II DU结尾，或者是否
以edu结尾，然后我们将执行Ray的表单验证错误，这是无效的
电子邮件，那么我们可以退回该电子邮件，由于我正在这样做，因此这是新邮件
您最终可能会使用的小功能是，您可以说电子邮件等于2
表单点电子邮件字段请注意，它在模型表单上，当然不在
模型，以便您可以在此处刷新我在其中填写了我的电子邮件，我说是ABC @
gmail.com，我点击保存的不是有效的电子邮件，因此它很酷，验证相当
简单，然后您就可以运行了，您现在知道在这里进行各种验证的事情了
会说，做国家不仅是形式上的，而且
我们一直在以这些形式进行工作，这是引入验证的一种非常好的方法
作为一个概念，您绝对可以在模型的字段上进行验证
很好，但是验证的想法不管是模型形式还是只是模型
标准的django表单以及您应该看到的内容，或者希望这种模式
您注意到的是，如果我将其注释掉并将其更改为表格
表单本身将呈现完全相同的所有验证将呈现
所有这些都一样，但是当然要注意的是实际形式是如何工作的
在视图中它略有不同
因此，要在表单上设置初始数据，我们要做的就是创建一个字典
因此，就像初始数据集等于某物一样，我们要设置什么
等于它将是表单内字段的名称，因此看起来
在表格中，我们有我们的原始产品表格，我们将进行标题描述价格
这些东西中的任何一个我们都会在这里设置初始数据，所以它当然是
在表单本身之外，因为它可能会根据您的视图而改变，因此这
是我的真棒标题，然后我们将其传递给表单
所以我们只说初始值等于该数据，然后我们就可以使用任何
在那里的字段，所以如果我在其中刷新，您会看到什么
那里的初始标题不是占位符，实际上是相同的文本
还是现在里面有实际的文字，我不知道你要去多少次
以原始Django形式执行此操作，您更有可能要做的是在产品中执行此操作
表格或模型表格本身，所以如果我将其更改为模型表格，则数据为
没什么不同，它看起来仍然完全一样，这是因为模型形式
与Jago表格没有太大不同，因此，如果我实际上又添加了一个表格
属性，实际上改变了
数据库，以便更改对象，我们要首先获取该对象，因此产品
得到的对象现在会说ID等于1，所以我们仍然必须
查找获取这些对象的动态方法，我们还没有讨论过
但是要以这种形式实际更改一个，我们需要做的就是将它作为
实例等于任何查找，因此在这种情况下，它只是obj，所以现在
我能做的是看一下那个物体，所以我仍然有初始数据
让我们看一下价格，如果我在这里刷新，我会看到价格
实际上发生了变化，尽管编辑时最初的标题通常不会
在后端，您可能不会拥有初始数据
相反，您将拥有的是实际的标题本身，当然，
确保您可以编辑的最后一步是有效的表格
是有效的，然后您就可以做点保存了，所以
在这里刷新，我只说产品而不是产品标题，我将进行更改
价格达到我想节省的一些荒谬价格似乎正在奏效
我们将仔细检查管理员，以确保它是我们正在查看的
产品是第一个产品，因为我们要
从第一个开始，我们看到了产品，我们看到了新的价格
这就是您设置初始数据以及编辑模型表单数据的方式
现在，我们将根据URL更改我们的内容，否则称为
动态网址，因此我们首先要说对象等于产品对象
ID等于1，因此我们要设置默认值，以便我们可以准确地看到
这样可以使对象等于obj，然后我们将渲染出基本的
这个基本模型的模板，最后在我们的URL中，它就是它的外观
喜欢，但我们要做的是使它充满活力，这就是我希望能够
在这里传递一个ID，所以如果我输入一两个，该内容实际上会发生变化
基于此，我们只需将其放在此处，然后我们
声明类型，因此在我的情况下，我将使用整数，也可以使用STR
您也可以使用slog，稍后我会参考其他一些信息
整数，然后我要给它起一个名字，我会说ID，您也可以
说出我的ID或您想要ID的几乎所有其他内容都是默认权限，所以
这种标准是使用ID之类的，或者您使用的是
子弹类型，你会做子弹：子弹，但我们将int用于整数，只是
传递该ID的作用是将新参数传递给我们的视图，因此
默认情况下，我们的视图具有该请求，并且该请求传递了ID的新参数
如果您像我的ID一样在此处更改名称，我们将再次声明其名称
将不得不在您的论点上更改名称，我们将其保留为
只是出于说明的目的，但现在要发生的是我们的对象是
将根据该ID进行更改，因为我们将传递该变量
就像这样，所以我们保存了该内容，然后在页面中刷新，然后转到第1页
动态视图，我的意思是我需要确保将所有内容保存在这里，但
这是一个错误，如果我实际上没有更新我的视图功能，这是
发生什么正确的事情，所以我将保存它，并在短短一秒钟内重播该错误
但是，如果我在这里刷新，我现在看到的是您现在知道的是动态URL
它实际上是根据数据库中的内容进行查找
因此，如果我们进入我们的产品并单击其中任何一个，我们就会发现它也是
进行相同的查找（授予该URL）会略有不同，但是
数字在重复，因此如果我实际上将其更改为ID并刷新
在这里，我通过动态查找得到了这个问题，或者我们认为这仅仅是
我们这里的view函数不知道这个关键字参数是什么，所以我们只有
确保我们把它放在这里
为了处理动态网址中缺少的对象，我们将导入一个新的
称为get object或404的快捷方式，因此基本上它将引发404页面
如果不使用它，那么我们要做的就是获取对象或用于实际
我们正在使用的模型，然后是我们正在使用的查找参数
这将解决该错误，因此我们保存该错误，现在，如果我在此处介绍产品
不存在不再会给我这种错误，而是
说页面未找到这是一个有效的错误，还有另一种方法可以做到这一点
将其放入try块中，让我们从Jango迅速完成该操作
到HTTP导入HTTP 404，这也将增加404页面，就像这样
对象或404，所以我将继续对此进行注释并执行obj
等于产品对象获得ID等于ID，我再次说我要放它
放入try块中以处理异常，因此除了这是产品或
模型名称不存在，那么我们将继续进行并提高HTTP 404，这样
我们再次将刷新保存在此处，将其保留用于错误处理，如果我
将其更改为其他数字，仍然很酷，所以实际上让我们
看看这个真正的快速，看看我怎么知道这不是事实
我已经做了这么久了，所以如果我像保存刷新一样保存它，我会得到
这是一个例外，对，这是一个例外，这仅仅是一个
处理设置异常的简单方法，此获取对象r44是它们的首选方法
因为它比将所有这些不同的东西写出来要快得多，
甚至只是整个try块，所以我再次使用
删除数据库中的对象非常简单，只需输入obj
点删除，这实际上将删除该对象，但是不幸的是，这将删除
发生在所谓的get请求上，所以我们希望避免这种情况
发生的事，我们想把它放到那里，让我们说一个确认后的请求
还有其他请求，有一个叫做删除请求的东西，但我们要
在发布请求时执行此操作，以确认他们确实要删除此行
所以这意味着我们要在这里渲染一个表格
帮我们发帖，这里实际上没有数据，但是我们需要知道的所有信息
是他们是否实际提交了该表格，这意味着他们要删除该表格
否则他们可以返回一个URL，当然我在这里使用这种URL模式
与我们之前看到的没什么大不一样，所以要这样做
那么我们就继续说，如果请求方法等于发布，那么
我们将继续删除该对象，所以再次确认
删除就可以了，实际上不是确认删除的方法
他们想要的，如果我现在在该URL上查找任何给定的对象
我讨厌说“是”，然后如果我真的在这里刷新
我看到它实际上消失了，所以这里的最后一件事是
将它们重定向到其他地方，我们可以使用重定向快捷方式和
只需返回重定向，我们就可以返回几页了，或者
相对地，我们只是说“是”，这将使我们回到这一点，因此我们可以
这样的事情肯定会带来更多的回响，是的，这是
实际上删除数据库中的这些东西
所以我们删除它，说是，它使我回到可能列出的产品上
他们出来，但这是在数据库中，我们现在看到这些都是
不见了
要列出对象，我们首先必须获取一个查询集，该查询集通常命名为
作为查询设置螺钉集，对象点缀所有对象，这将成为
给我们返回一个对象列表和一个典型的上下文变量名称以供查询
set是这样的对象列表，所以这意味着在我们的变量中，我可以
实际渲染出该对象列表，您现在应该知道obj或
对象列表中的实例，这是我在对象列表中的for循环，因此我可以
在for循环中使用实例变量让您了解我的产品
给这样的标题加上标题，然后将其标识为ID，我们将其放入一个P中
标记在那里，我们可以，所以我们保存并保存视图保存
您的网址，看看吧，如果我们现在回到产品上，我会看到我所有的
通过查询集来的数据也呈现出来，显然我没有
想发生，但现在我实际上有一个清单，可以在其中看到
这个模板让我摆脱了那个对象列表，但是你应该做些事情
请注意，此权限可以在任何模型中重复使用，这就是
目的是正确的，我们希望确保我们可以使这些东西可重复使用，并且
这就是为什么我们使用标准名称（例如乘员组和对象列表）的原因
创建指向任何给定产品详细信息的链接，您可能会做某事
这样，当然它会真正起作用，它将带您进入
相关网址和带有这些动态网址的路径就可以了
但这是因为如果您更改了这些网址中的任何一个，我们可以说
例如您将它们全部更改为P，那么您必须返回并确保
所有这些事情都改变了，只是麻烦得多，所以
我们可以做的是在模型上创建一个称为实例方法的东西，或者
模型上的一个函数，它将为我们缩短此过程，称为get
绝对URL，这实际上是在其中捕获URL的约定
Django，因此它已在其他地方使用，但现在我们将继续
在我们的产品中使用它，这样我就可以退货，无论我
使用F字符串或字符串替换作为URL，这使我能够
实际上从该实例中获取了该URL所基于的任何内容，因此，如果我进行更改，
我可以确定或知道的URL到处都是绝对URL
可以正常更新，因此我们只执行获得绝对RL的实例
这给了我实际的网址
是时候将我们绝对口头的方法转变为动态的了
本身就是此字符串中的字符串，因此，如果您查看我们实际命名的URL
我们的网址是故意的，我们还没有谈论它们，因为它只是相关的
到这部分，然后使它基于任何东西进行开发
为此命名，因此我们在这里使用了一个名为reverse的函数，
调用反向，这是我们使用关键字ours的一些默认值
希望您在某种意义上熟悉关键字args
我要传递给视图的关键字参数，所以我知道我需要传递这些参数
以及我需要传递良好的ID和完成的ID，所以self是指
到对象的实例，然后ID指代所构建的ID
进入它的下一件事是我只需要调用名称，所以实际的名称
将用于处理这些数据的网址，这是我们的产品详细信息，因此
仅命名产品详细信息，因此我们将其保存下来，然后继续并刷新链接
当然，所有这些现在都在起作用，这是一种确保您轻松进行操作的干净简便的方法
我的网址是动态的，而当我说动态时，我的网址最高
更改它以说P这些链接实际上将正确更新，所以如果我
单击它，现在它实际上也将对其进行更新，并且它会在整个范围内进行更新
到处都有使用绝对URL方法的站点
也使用此功能的第三方程序包，因此请记住这一点
当涉及到使其更具动态性时，请确保您可以对其进行硬编码，但是
绝对不是推荐的方法，所以让我们将其留为产品
削减
您将到目前为止所做的一切都整理成自己的
名称与您的应用程序匹配的视图，您将看到类似的内容
创建视图更新视图我将其更改为列表视图详细视图
更改该权利，因此，如果您不这样做，则应该对如何做所有这件事有所了解
现在返回一些视频，我们要做的就是查看我们的网址，您会看到
这样的事情与此有关，但是问题在两个方面出现
我们拥有的第一号表格实际上不是可重复使用的应用程序，我
必须直接在我的网址和第二个位置上导入所有这些视图
如果您不小心使用了相同的名称和关键字参数该怎么办
别的地方记得我们的模型是基于那个
发生了什么事？发生了什么事？按预期，它无法正常工作
完全不同的观点并不是很好，所以我们要做的是
实际上将其放入正在使用的应用程序内部的自己的URL模块中
使穷人可以使用的权利，并避免出现我刚才所说的情况
提到要创建这些URL，如果我愿意，我实际上可以导入所有这些URL
或者我可以像这样正确地快速导入，所以这是一个相对
导入我拥有的所有视图，然后导入路径，然后我们就
在我们的主要配置URL中声明URL模式，然后继续
剪掉所有这些并将其粘贴到我的URL模式中，现在就可以了
这些应用程序的网址格式，所以回到我的网址中，我实际上有一种使用这些方式的方式
网址就在评论中，就在这里，所以我们要做的就是
要做的是导入包含，然后引入示例，该示例给出了
在我们的情况下，博客应用程序我们正在使用产品应用程序，而我们只是这样做
然后在末尾加一个逗号，现在我们的URL设置了我们的主要配置
URL模式更加简洁，我实际上可以删除
穿过那里，所以我说这次刷新在这里，我得到的页面不是
发现这里发生的一切很好，实际上向我展示了
我的网址，因此，如果我做产品产品，它可以工作，但这不是我们想要的
出现这种情况的唯一原因是因为我们还没有摆脱我们的困境
在那里的原始路径，所以只要摆脱它就可以解决
问题肯定还有一个
我们需要解决的问题，所以我们保存并刷新我仍然有我的
产品渲染，因为它们是我单击的，它仍将我带到
错误的地方，这是名称间距的所在，所以如果我们使用应用名称
在我们的应用程序URL中-我们的应用程序名称，因此就我而言，产品适合您
只是称它为例，现在我可以在模型中做的就是在此处添加
products：现在我的反向操作基于应用程序本身或名称空间
和URL名称，所以我们保存刷新，现在它实际上将带我们
这应该是一个常见问题，因此如果您必须对此进行测试并尝试
自行解决，请继续执行并执行
意识到在URL上具有名称并不意味着它将检查
确保这些东西是唯一的，所以这是一种做到的方式，我的意思是你
可以根据需要更改产品的应用名称，这将允许您
更改名称空间，因此更改反向方法的方式也与您一样
可以看到这就是为什么反向实际上非常重要的原因，这是主要的
原因是当我想将此应用程序整合到另一个项目中时，我的网址
我要做的就是声明它们是我要确保使用的应用程序名称
我的用户知道或第三方软件包知道了
我们的产品网址以及该名称空间，我意识到这里有很多
继续在这里，所以您绝对不想多次尝试
多个应用程序可以创建多个模型，视图可以完成我们已经做的所有事情
自己多次导致这一点
接下来的几个视频将结合我们已经获得的知识
这个系列，所以我想确保您可以做的是这些步骤，在这里
八点到八点，现在就去做，如果可以的话，我要用这个
模型，但您可以使用所需的任何模型，但再次确保您执行了这些操作
如果您不知道该怎么做，请回到开始并开始
从这里开始，不用多说，让我们跳入我们的观点并使
绝对最简单的类脸视图，即列表视图
所以我们将进行课程文章列表视图，它将继承自Lois视图，
与列表视图，我必须提供一个称为查询集的东西，这是一个
要求，所以文章切的对象不是全部
这就是我的整个列表视图通知，我不必调用render
不必写模板名称，我也不需要做任何事情
有了这个，我要进入这个应用程序的URL，我要在这里导入它
我将把它带到我的默认路径中，这是我们已经看到的
在我要输入那个班级名称之前，我先称呼为
视图，因此它实际上将其转变为基于函数的视图，就像我们在
我们的产品视图页面右，这些都是基于功能的视图，现在这是我们的
基于类的视图，这就是您实际如何在一个类中运行它的方式，因此
现在，我要进入我的URL，并引入我新创建的博客URL，好的
所以我已经在该应用程序内找到了URLs模块，让我们继续看一下
我所有的帖子都在这里刷新，我看到我们他是什么，
说模板不存在，因此默认情况下，类的页面浏览量查找
特定模板及其查找方式是应用程序名称，模型名称
然后是视图名称或通用视图名称，因此在我的情况下，它是一个列表
视图，所以它将查找博客斜杠型号名称下划线列表ml这是
没什么不同，所以让我们实际将其放在这里
只是将来给我们的参考，所以我们实际上需要做的是
创建这个我实际上已经在这里有这些项目，所以有两种方法
关于如何实际引用其他模板的问题，我们可以说
模板名称等于我们想要的模板，因此文章用斜线表示文章列表HTML
这样我就可以将我的基本模板用于文章列表，或者
可以基于通用的一种，我不会基于通用的一种
只是想向您展示如何覆盖这些模板，以便让我刷新
在这里，现在我得到了那个清单
下一个最简单的基于类的视图很好，这是我实际上的详细视图
将复制文章列表视图并仅使用详细视图进行更改，
就像将它复制到我的URL中一样，复制到这里，我要保留
这些东西只是为了个人喜好就可以了
在我的网址中，我将像那样替换细节，然后更改
pk的关键字参数我已经在这里有了我的模板，这非常简单
所以我要继续阅读第一篇文章
其实并不难做到，当然，如果
我没有覆盖模板会发生什么，我会得到类似
这并且如果我将关键字参数更改回ID，将会发生什么
我会得到这样的东西，所以如果你绝对可以自己查找
您想要但默认情况下它正在寻找pique或slug的关键字参数，因此
它们与模型中的不同字段相关，因此PK也称为ID
字段，所以ID实际上等于pk，但是它代表主键，有点
更高级，但如果我们尝试通过slug查找，我们只需将URL更改为
关键字参数URL slug表示它无法解决此问题
进入我们的领域，这是我们唯一选择的有效Content ID和标题，因此
让我们继续并返回ID，然后在我们的视图中覆盖某些内容
是def get object方法，它内置于基于类的视图中，尤其是
具有详细视图的列表视图是没有意义的，因为
详细视图只需要一件事我们所有的视图都想要一个查询集列表，因此
让我们继续使用我们以前见过的方法来做到这一点
获取对象或404，所以我们在这里要做的就是返回获取对象或404
实际的模型名称本身，然后我们要很好地获取ID，我该如何实际获得
网址中的ID，例如如何从网址中获取此关键字参数
与它的视图有很大不同，即该详细视图的视图
它被传递给该通用函数，但是在我们基于类的视图上却没有
这样工作，所以相反，我们可以使用self dot关键字args
获取ID，因此这是正在传递的实际关键字参数
该网址可以通过将其打印出来来查看其内容，但这就是我们的方式
实际上会覆盖该关键字参数对我们URL的作用，然后
我们可以看一下我们的观点，您知道它又回来了什么，并且它可以正常工作
很好，所以它与我们所看到的非常相似
以前，但现在略有不同，我知道这可能
感觉比这更令人困惑，但这主要是
理解基于类的视图是从许多不同的部分继承而来的，
覆盖其主要功能只是获取对象详细信息视图
详细视图的功能是现在从特定对象渲染模板，如果
我摆脱了此查询集，并刷新了它仍然可以正常工作
不需要该查询集查询集所做的事情是它限制了选择
换句话说，让我们来看一下该详细信息视图
将其更改为就像过滤器ID大于1一样，不用担心
不知道那是什么，但是如果ID大于1并且我更改了我的
再次返回该主键的URL是我们覆盖的默认值
如果我在这里刷新，现在会设置默认机组，这会给我一个未找到的页面，并且
这是因为默认查询对象不在
该查询集的那边不存在，所以这是
真的也很酷，也许希望这会让你想学习
有关查询集的更多信息，但是无论如何我都会继续并留下评论
离开该对象，然后将URL作为ID保留，因为这几乎
与我们对其他视图所做的相同
有一个创建或更新视图，我们要确保我们有一个模型表单，所以
我将继续使用此模型并导入我的意见
所以从表单导入模型表单，然后我将继续创建我的视图
所以我实际上会很好的，我的意思是我可以复制它吗？
绝对非常相似，因此我们将其称为“文章创建视图”，然后开始
我将这个称为create write，所以我需要制作该模板文章
创建HTML，就像创建产品一样，它只能呈现出表单
非常简单，所以我们在这里有了我们的观点，让我们将其引入我的
URL并再次创建为视图打开了该路径，让我们进入博客创建
好吧，所以我们在这里缺少了一些东西，这就是说使用模型进行混合
如果我们查看我们的视图，我们会发现没有字段的字段是被禁止的
实际上并没有引入我们的模型表单，所以如果我只是做表单类，那该怎么办
对文章模型表格说，如果我执行此操作，则刷新那里是我们的表格
它实际上将保存该数据，它将在默认情况下正常工作，并且将关闭
所有验证（如果我的模型内部有）再次形成那些验证
我们在产品模型表格中所做的，所以如果我想验证
标题我会说干净的标题，例如各种验证，以及
内置的，所以这个视图为我们做到了，就是我们仍然有
相同的查询集，我们也有一个名为form valid的方法可以将self引入
和表单，所以我们在这里要说的是这实际上是表单有效数据，所以
我实际上可以打印出清理数据的表格
然后我将返回super超类的内置默认值
该表格有效的表格，但这将使我看到实际上是什么数据
来到这里，所以如果我刷新新标题，这是我第二次点击保存
我确实收到此错误，这很关键，我们将对此进行调整，但是如果我看看我的
该错误之前的终端，我可以向上滚动，我看到干净的数据好了，所以
这是什么错误，获取绝对URL是应该通过以下方法完成的操作
默认为您模型的默认值，因此，如果我们回顾一下列表，这些项是
站在那儿就像它确实创造了那个物品，只是没走到任何地方，所以
如果我们创建此获取绝对URL方法获取绝对URL，那么我想要
它是基于像这样的反向的，所以如果我复制另一个，我会
只是按照这些思路做一些事，我知道我肯定会裁员，但是你
应该已经知道该怎么做了，然后该应用的名称就是
我们的反向，这将是文章的详细信息，所以反向功能是
进入详细视图，所以现在让我们继续创建另一篇文章，然后说
新的帖子，这是我们点击保存的新帖子，现在它实际上将我带到该URL，因此
然后是获取绝对URL方法的关键方法，
信条视图实际上也是更新视图的一部分，但主要
这里的事情是我也可以通过覆盖
像这样的成功URL或定义获取成功URL，您可以返回一些路径
这是重写它的另一种方法，但是默认方法确实很好用
对我们来说，因为撰写文章后的机会很大，您可能
要看一下，所以接下来的实际内容很漂亮
很简单，我们可以复制此创建方法，然后将其放在我的细节下方
查看并将其更改为我的更新视图，因此文章更新视图与我们的
详细视图，我将要更新特定的文章，所以我可以使用它
再次获取对象方法，几乎​​摆脱了我不拥有的所有其他东西
实际上必须更改模板，我现在可以将其带入我的URL并抓取
这样的更改，所以如果我想更新它，我只需要输入
update oops未更新，但已更新，我们可能需要确保保存
一切正常，请更新，这是我点击保存的第三篇文章，它带来了我
回到如此深的方法，唯一的创建和更新几乎是相同的
区别在于它实际上是抓住它的对象或事物的实例
尝试仍然使用相同的表单仍然使用相同的查询集来更改
移动对象，我们只是使用了删除视图，它与
详细视图，因此本文将删除视图并删除视图，然后我们将转到
使用另一个名为delete的模板，然后我们仍然希望得到
这里的对象方法和我实际的删除形式与我们
在产品中创建的产品，但我在此处将其称为产品
在这里保存，我们保存我们的视图在这里做一些导入并带来一个视图
命名为view取消注释相同的内容，所以让我们回到帖子中吧
例如说发布第二个并删除它，您要删除这个吗，我们说是
再次，我们这里没有成功URL，在这种情况下，它不会使用get
绝对URL方法，因为一旦我说该对象就不再存在
是的，它从数据库中删除了它，因此甚至看不到，因为
对象不见了，所以我们需要做的是设置一个，而不是设置
实际的字符串，例如成功URL到Blog之类的内容
取而代之的是，我要引入反向调用，以便从Django URLs import
反向实际上让我们将其放在此处，然后我继续
并说define get success URL本身就包含了，它将返回反向
博客列表视图，或者您知道我们在这里拥有的实际上是文章列表
我看过的好东西，所以我们将其更改为文章列表，这也是文章
好吧，那里很酷，所以现在这是我们的新删除视图
我不能保留该查询集，但是再次，就像细节一样，没关系
视图，因为那里有我的get对象调用，所以我保存了它，现在我去删除
我要删除它吗？我们说是的，它删除了它，这使我回到了我所有的我
帖子非常简单，需要注意的是
如果我没有获取绝对URL方法或更确切地说是get，则会出现删除错误
成功的URL方法，我尝试删除某些内容并说是该错误
实际上阻​​止了与创建不同的删除，只是一些有趣的事情
要知道，但这就是基于类的视图
这是一个相当标准的基于函数的视图，它真正要做的就是渲染
拿出一个我们已经拥有的模板，并为此我制作了一个新应用
我创建了一些URL，并将其添加到我的设置以及URL中，因此请确保
你知道该怎么做，但是我有这个基于功能的视图，如果我看的话
这就是全部，只是呈现出一个模板，这并不是一件大事
您必须将其转换为我们将继承的基于类的视图
来自一个叫做view的类，所以这是基本视图类
等于很少，我要做的就是讲课，无论我想做什么
在这种情况下称呼它，我将其称为课程视图，再次我们将通过
在那个视图中，要拥有完全相同的功能，我可以正确地做到这一点
这样基于功能的视图，我现在将其移至此处，但如果您还记得的话
基于函数的视图的实际名称并不重要，但在内部
基于类的视图确实很重要，并且它们与HTTP方法相关
换句话说，它试图处理的是get，因此get将运行
在这里，但是就像如果您要提交像fo RM这样的论坛，您通常会使用
发布方法，这实际上就是您处理论坛的方式，我们将为您介绍
稍后，但是现在我们有了课程视图，我们将其导入到我们的URL中
会将其注释掉，将旧的注释掉，在此基于函数的视图中保存
并在这里刷新，我们有一个小问题，我们必须实际添加
自我也在这里，因为如果您熟悉Python，当我们说
像新的obj或类的新对象之类的东西，您经常会做类似的事情
那和那个对象是那个类的实例引用某种东西
像得到一样，我们必须实际引用其中的自我，并以此
应该可以解决该错误，因此，如果您看到类似的内容，则说明您确实
我刚才所做的那件事对
看到，现在它实际上是在渲染该模板
标准的get方法，如果需要，您可以打印出各种方法
请求方法，但请注意，这些与事实相同，唯一不同的是
这是一堂课，所以这样做的另一个好处是说
诸如模板名称之类的内容大约等于HTML，然后我们就去
前面说出自己的点模板名称，并大致呈现出完全相同的名称
东西，所以这很酷，这方面的另一个方面实际上是即将到来的
在这里并更改此模板名称以联系HTML点保存该刷新
在这里，您知道我的模板实际上已更改，所以这是其中之一
使用基于类的视图的巨大优势在于更改事情很容易
所以我们现在在这里有这个模型，我要把它带入我的观点
这是一个详细的视图，我现在如何实际处理它，我们
想要从我们的URL传递参数，以便在URL内停止PI内的PI
放大器，我们只是基于我们的产品
网址没有什么不同，它们并不是什么新鲜事物，因此我实际上想同时
这些模板能够正常工作，因此我要传递的ID等于无
ID等于无，表示您使用ID时不再需要该ID
只是ID，表示需要该参数，说这并不意味着
我们在这里有一个默认值，如果您愿意，还可以设置另一个默认值，但是
基本上，这意味着这两个模板或这两个基于类的视图
实际上将呈现良好的效果，现在让我们来看一下
我将使用我的标准模板，或者我将课程设置为斜线或
您知道的课程详细信息与详细信息视图通用视图一起使用
所以我要继续为该模板创建新文件夹及其文件夹
会在课程表中显示新文件夹或新文件，但会显示课程详细信息，但HTML和
我要继续，然后复制并粘贴之前已经完成的操作
并使用标题，因为这是我实际上在我的唯一字段
模型好了，所以我现在让类基本视图运行两次，但是有两个不同
模板名称之一是与HTML取得联系，另一种则与
我在这里设置的默认设置，让我继续保存并开始
如果我在这里刷新，请提前并用完它而不是课程
如果我要进行一个或某种细节显示，我现在有一个空模板
为什么我有一个空模板是因为我没有传递任何上下文
进入此模板本身，以便传递该上下文，我们将从顶部做起
模型导入过程，我们将继续进行
快捷方式获取对象或404，我只说对象或相当obj获取对象或
四或四门课程的ID等于ID可以，并且因为我的默认设置是none
我会说，如果ID不为空，则意味着如果过去的参数不为空，那么我会
继续说这就是obj，我也将在这里设置我的上下文，以便
然后我可以在这里用等于obj的对象扩充它，然后我们开始
或更确切地说，我们想将联系人传递给，所以我们说市长爽快地打招呼
世界，这是我的第一个对象的名称，我也可以在其中添加
该ID只需仔细检查一下我是否已正确完成所有操作，然后保存并
到那我们去了，我们有我们的ID和你好世界
让我们继续创建原始ListView
非常简单的课程列表视图，并从视图中继承，我们可以添加一个
模板名称在这里就像我们之前做过的一样，我将其称为本课程
列表，然后我要做一些新的事情，那就是在这里设置一个查询集
当然一点也不反对，然后我就继续做下去，找到自我
请求args和关键字args，然后我们将继续进行操作并返回
以及请求的渲染自身点
模板名称，然后是我的上下文，我将在此处放入字典并说
对象列表等于自点查询集，以更好地说明我
只是把它放在那样的背景下就好了，所以我带来了
这进入我的网址，现在我要继续，你知道摆脱掉其他
一个并将其保留为此处的视图，然后在我的模板中继续
说课程列表点HTML，然后从我的产品列表中复制一个
在那里，我现在不用担心链接，我只显示实际标题
妥善保存，然后回到我们的课程列表中，我们看到了
我在那里有两个非常简单非常容易，但我想走一步
进一步使其更接近于通用视图的工作原理，即定义
get query set方法在这里，它会做的很好，它将返回
自我点查询集，然后在我的上下文中而不是查询集本身
只会调用self dot get query或此处的此实例方法
相反，如果我说在这里刷新，那是完全一样的，但是如果我
实际上是从此继承而来，并说该课程是我从该课程列表中获得的列表视图
所以我们就把它放在下面，我说查询集，然后我把它
等于当然不是对象，不是过滤器ID等于1，这实际上是
给我一份物品清单，即使它只会给我一个清单，我也带来了
将其保存到我的网址中，并使用该网址保存刷新，在这里让
确保确保我已保存一切正常
我在这里刷新一下，您知道使用最大的好处是什么
基于类的视图是我当然不是这个继承属性
最后要这样做，但我想向您展示四个插图
插图目的
当您创建某些东西时，您想要接受两种方法，即get方法
和post方法，所以我将继续在这里获取课程视图
将其粘贴并称为课程创建视图，我们在这里有get方法
我将其保留为空上下文，然后我们想要使用post方法
因为当您实际创建某些东西时，您会将其发布到后端，因此
我们想确保我们发布的内容非常简单，我实际上并不需要
通过此处传递的ID参数我们不使用它，当然
模板本身现在将是课程创建，现在我想输入表格
这是从表格导入，它的名称是课程模型表格，我想
实际上在两个地方初始化它，正确的是get方法会说
形式等于课程模型形式，确保它是空的，就像那样
然后在我的上下文中，我将具有通过的形式，因为我的
创建模板的需求还可以，所以我们将其引入到我们的网址中
并将其添加为路径
好的，到目前为止非常简单的东西，让我们继续进行下去，我们会看到一个
标题在这里好吧，所以如果我把一些东西打出来然后点击保存，它看起来就不像
发生的一切都很好，实际上什么也没有发生，因为我们的观点
接受发布数据，但不执行任何操作，因此我们必须做的是
来到这里，抢走请求的帖子，不管数据是什么，然后再次发送
我们把它放在这里就好了，这样我就可以
实际上，无论上下文如何，表单数据都会通过
让我们继续去创造一些东西，它看起来好像已经发生了。
让我们回到我的课程中，由于以下原因我仍然没有任何东西
当然，我仍然需要进入这里并说如果表格有效，那么我只是
表格不安全，这将为我提供保存模型表格的实际方法
现在我想测试这种方法，以确保实际上是这样的
渲染出来，要做到这一点，我使用了一种称为“字段验证”的方法
我们实际上可以使用任何形式的下划线进行验证的表格
名称是，所以我要验证的字段名称是标题，但可能是
您可能使用的任何模型字段或任何其他表单字段
您忘记了这一点，所以我们将继续前进，来到这里，实际上
它的标题等于自点清理的数据点git，然后等于
当然，我们会说，如果较低的标题等于ABC之类的东西，那么我们将
只是应该继续并提出表格点验证错误，这不是有效的
标题好吧，所以这仅在表单级别上，它不在
建模仅在表单上进行，这是您应该在此处进行关键区别的形式
记得很明显，我们暂时还不会碰它，但这是关键
区别，所以现在我们已经了解到我没有改变任何东西，让我们
继续尝试一下，再回到这里，我只输入ABC命中，保存
它说这不是一个有效的标题，换句话说，我们的post方法是什么
在做的是它实际上正在经历并初始化需要发生的事情
现在您可能要考虑做另一件事，那就是一次
这是有效的，您实际上可能想重新呈现该表格，所以我要说另一个
我打过的标题保存在其中，尽管我可能想创建另一个标题
形式或其他课程，或者我正在正确建立的任何内容，所以我希望它能够
是空的，我希望它保持其原始状态，所以要做的就是
重新初始化实际的表格本身
尽管我们的更新视图结合了我们刚刚创建的内容以及
详细信息，所以我们在这里有此更新视图，我们有两种方法
肯定会在那里，而且基本上都是一样的
他们现在正在做的是渲染表单，所以实际上并没有很多
与目前的创建视图不同，但我所要做的事情
要实际调整的是此get object方法，所以此方法本身是
将覆盖您通常会在细节视图中执行的操作
那里会有一个叫做get objects的方法，所以您可以在自己的方法中使用它
各种正确的方法，就像我们在这里所做的那样，实际上是
我们将要调用该对象，所以我想做的就是抢
我之前做过的相同数据在这里，这是获取对象
或404相关的东西就在这里，所以这将抓住那个细节，并
抓住我们只是做自己的ID，而获得ID的关键字args显然是
像我们在此处看到的那样，URL上出现的关键字参数
现在我们是一个ID为ID的整数，实际上
为我们抓住那个物体，所以我要继续说obj等于
没有，这将抓住那个对象，所以现在我们内部有一些对象
上下文，因此这将同时适用于我们的get方法和post方法
将在那里存在该对象，如果我们看一下模板，这是一个组合
详细视图并创建视图表单，现在我们要做的是
实际更新此项目，因此我们在这里拥有此项目，我要做的就是通过
它作为实例进入我的表单，因此实例是obj，我想拥有
除了请求点帖子之外，它也在这里，所以这很抢手
与该实例一起发布数据，这正在初始化寻找
如果有效，那么它将为我保存一切，最后
我的模板具有发布方法，并且表单确实没有更改，所以让我们
回到这里，让我们看一下我的更新视图，不，我们得到了
上下文错误，因此我们要确保已定义上下文，这就是
这个应该在这里实际上应该不会有一点错误的对不起
关于这个好吧，所以我们回到这里，你好，世界，我将其更改为
打个招呼，我将其保存保存，将其更改为打招呼，我将返回详细视图
如果我回到更新视图并将其更改为ABC，它仍然是您好
保存它再次进行验证，现在您可能会看到这是
多余的代码，这是因为我们必须通过原始方式来做到这一点
详细说明，我们开始做的事情不是多余的代码，但实际上是在这一点上
就像您最好使用内置的通用类人脸视图
同学们认为我们已经结束了，所以我的意思是
更干净，更简单，但实际上这里的想法是可以理解的
它的原始版本
继续更新视图的想法，我们有这个删除视图
几乎完全相同，只是我们不需要输入表格，然后
我们要做的最后一件事实际上是重定向，因此我们实际上删除了
该post方法上的对象，然后在导入后将其重定向到某处
重定向，当然还有我的网址，我先进行更新，然后在我的旁边
模板本身就是在那里的表单，我只是渲染了这个原始表单
正如我们所看到的，所以我们想删除课程，而这里的想法是
我们呈现出这种确认消息，然后发布该消息
说是的，我们确认一旦您发布了该帖子，然后您实际上就删除了
那个项目，让我们回头看看我要去的课程
课程三删除，然后我们去了，所以我们要删除另一个课程
标题，我们说是的，它删除了它，重定向的过程确实非常简单，但这是原始的
做到的方式
混搭是同学观点如此好的原因之一，
mixin所做的是它允许我们用一些新代码扩展基于类的视图
让我们看一看，所以我要说的是课堂，我们称之为课程
对象混合，它只接受对象，因为默认对象只是一个
Python对象，然后我们继续说，我们将为其提供模型
名称或模型类，或只是简单地建模，它将被赋予为无或它们
将执行一个名为get object的方法，然后我们将返回与
我们以前见过的东西，实际上我们将在这里将其返回，因此我们已经
我们在这里的对象，而不是当然，我们将做自我点模型和
当然，默认值本身就是默认值，因此我们只需要保留默认值即可
默认值，所以现在这是正确的。接下来的事情是让我们继续
只需说出URL查找，或者您就可以简单地知道查找，这将是
等于ID，所以现在我在这里我可以将其更改为self dot
查找好吧，这差不多可以帮助我减少冗余
在我的代码内部，这样我就可以将这个对象混入并将其放入我的
现在删除并完全删除该get对象方法，因为它
实际在这里工作，这就是这里这里将称为混合
版本，并且您要确保先将混音放到最后，然后再将
经典视图或最后一堂课，然后我们可以做同样的事情进行更新
我们可以为创建做同样的事情，或者实际上我们不需要它，
创建，但我们也不需要列表中的内容，然后最后详细说明，这样
这里的对象不是全部，我们只是做上下文
对象等于单元格类型获取对象，因为它的其余部分将
如我们期望的那样正确处理，如果不存在，它将引发该错误
就像那样，它将在该字段上查找
查找必须与我们在此处正确执行的查找相同，所以这
这样会使事情变得更具挑战性
所以我将其保留为ID，但这里的总体思路是，我们将
理论上可以更改查找内容，但就我而言，我只是
要再次将其保留为ID，但这就是混入的实际工作方式
实际上就是这样工作的，现在我已经拥有了一切，让我们继续前进，
看一下课程内部，这是第一个
仍在工作更新仍在工作删除仍在工作
因此我们现在通过创建自己的mixin减少了代码量
当然，如您所见，我们可以使其变得更加复杂，一旦您使它变得更加复杂
那么复杂，那么我们的班级评论就更加强大了
[音乐]