粉丝2850获赞6127

hello, 大家好,欢迎大家收看零基础入门章狗加 vio 三前后端分离开发课程。 课程该要本课程将分为两大部分及后端接口部分由张狗负责,这一部分将从零开始,一步一步带你入门张狗,直到后端接口开发完整上线步数啊,一步一步带你来完成这个东西。 前端模板部分由 vill 三来完成,那通过实战深入理解 vill 三的一个基本使用方法,搞懂 vivo 单页面组建化开发的一个核心知识,快速产出项目。 初识张狗,那张狗于二零零五年以 b s d 协议开源发布,是一个 m t v 架构模式的一个问本开发框架,他拥有一个啊,拥有一个悠久的一个历史啊,零五年,距今啊,已经十多年了,他的发展非常成熟啊,社区也非常的庞大,他内置了数十个应用啊,可以达到开箱即用的一个效果, 从数据库的 o r m 到前端模板系统都有一套完整的解决方案。 那么这就牵扯到了啊,就引出了我们为什么要选择张狗的这个问题。首先呢,他张狗帮我们处理了 when 不开发的一个大部分的麻烦,我们只需要集中精力开发应用,而无需重复造轮子。 张狗它包含了数十个附加功能,可以使用它来处理常见的开发任务,例如身份验证、 内容管理、文件上传、缓存处理等等啊,非常多的一个细节问本开发他本来就是一个啊,大而全没有,他的技术难点不是很多啊,非常容易上手,但是他的知识点却非常的庞杂 啊,他帮我们其实处理了很多很多的一些东西啊,可以免去我们啊再次去处理这些问题的一个麻烦,因为他是常规性的,他帮我们封装了,帮我们处理了 那张狗,他是他也是一个非常安全的,他帮我们避免了很多常见的安全错误,例如塞口注入、跨站点脚本、跨站点请求伪造和点击劫持等等啊,其实很多这个他也做的非常好啊,做的非常好,其内置的一个身份验证 系统,帮我们提供了一种管理用户账户和密码的一个安全的方式。他可扩展性强,使用了可插拔式的一个设计理念啊,非常便于扩展他的社区庞大。我们刚才说了,你遇到任何问题啊,都可以快速找到答案并解决掉。 那张狗遇上 will 三,张狗和 will 三的一个结合啊,为我们开发者提供了一个强大而灵活的一个问博的一个开发解决方案。张狗负责处理后端逻辑和提供 a p i 接口,而 will 三则负责构建前端界面并与后端进行交互 啊,这就是前后端分离模式的一个开发的一个基本的概念啊,那这种前后端分离的架构啊,使得开发过程更加高效 灵活,可以快速的构建出高性能、交互性强的问捕应用程序。也就是说他前后端分离最主要的就是什么? 就是说后端你只需要提供数据,前端我只负责界面。那么其实说我们后端开发一套接口,你们前端你不论是说你要在手机上去开发一个 app, 你也可以去调这个调用这个接口,你要在 pc 上面开发一个网页,你也可以去调这个接口啊,你可以在别的终端啊,需要到用到这个接口,你也可以去调用这个接口, 这就好处啊,你可以一个接口适配多端啊,再不要不用说是之前那种用后端渲染模板的方式,每一个端你都得去开发一套模板,开发一套逻辑啊,这就是前后端分离开发的一个呃呃, 一个好处啊,也就是我们现在比较流行的这么一种开发方式。那么魏佑三啊,就让张狗这个框架呀,就又焕发出了一个新的生命力啊,新的生命力!那下来学完本课程,你将收获到什么呢? 第一个啊,你掌握了张狗和未有三的一个基础知识,你将深入理解张狗框架的核心组件,如模型、视图模板和 url 配置,能够独立完成张狗项目的配搭建与开发。 同时你将熟悉 vivo 三的一个响应式系统组建化开发、数据流管理以及生命周期钩子等核心概念啊,能够构建出交互性强的一个前端界面。也就是说,我们这个课程是一个全站类的一个课程, 既手把手带你编写后端的接口,也手把手带你来写 vill 三的一个前端模板,然后将他们两个前后端对接交互,这样子你就掌握了一套啊, 整体的一个项目的一个运作能力啊,就是精通了前后端交互与 api 设计。你将学会使用 jungle rest farm work 构建 rest for api, 实现前后端数据的交互与通信。你将掌握未有三与 api 的一个交互方式,包括数据的获取、更新与同步,以及错误处理和加载状态的管理。 第三,完成实战项目,提升实践能力。你通过实战项目的开发,你将能够综合综合的一个运 用所学知识啊,构建出具备基本功能的一个问不应用在项目过程中啊,你将通过锻炼获得需求分析、系统设计以及问题解决的这些综合的一个能力的提升,提升自己在问不开发领域的一个实践能力。 第四,获得职业竞争力与广阔的职业发展空间啊。你掌握了张狗和 vivo 三这流行的前后端分离开发技术站啊,将使你在求职市场上更具竞争力啊,能够胜任更多高级和复杂的问某开发岗位。 随着问本技术的不断发展和创新啊,张狗和魏佑三的应用领域也在不断扩展,掌握这些技术将为你打开更广阔的职业发展空间啊。来,我们 课程的一个适用人群就是潘森的一个初学者,你只要你对潘森有一个基本的语法认识啊,我们就可以来学习本课程那张狗的一些知识,我们都是手把手从零开始带你去介入的,即使你之前哎呀没有用过张狗啊,也无所谓。还有问博开发爱好者啊, 温补开发爱好者,这个是在你是潘塞的一个初学者一个基础上的,你对潘塞首先要有一个了解,对 h t m l c s s g s 有一个基本的掌握啊,这两个是一个重叠的要求啊,重叠的要求。 如果这些啊你都有一个基本的认识,你就可以学习我们这个课程了。那在校学生啊,相关专业和或者非相关专业的均可以啊,只要你具备这两个知识点,第四个就是 只要你热爱编程,热爱生活,乐于学习,善于思考,你都可以来学习本课程啊,我们都是从零开发,手把手带你的下来我们课程要用到的工具。我们 pass 的这个版本是三点一二啊,就十二的版本, 到目前为止的话,他是比较新的一个最新的一个版本啊,张狗的五,张狗的话也是五点零加。五点零加也是一个最新的一个版本啊,应该到五点零几了。现在 啊,都是最新的 vs code 代码编辑器,还有 loud g s, view 三啊,这几个 loud g s 和 view 啊,它是成套出现的啊, 那这些基本的工具啊,需要自己去提前安装和配置,例如潘塞和 note gs, 需要大家提前安装好啊。 vsq 的编辑器啊,可根据自身情况,你有你自己啊,比较喜欢的编 编辑器啊,比较拿手的编辑器,上手的编辑器,你可以继续用你的,没必要说是非要用 vs co 的编辑器啊,我们课程是基于该编辑器的啊。

哈喽,小伙伴大家好,欢迎收看大熊课堂,我是安迪。本节我们来介绍如何使用 d i f 的方式来实现同样的接口功能。在使用 d i f 的时候呢,我们会创建一个序列化器, 所谓的序列化器呢,就是实现将拍森转化为阶层格数据,那么在这个转化的过程中,我们可以加一些验证,你比如说用户输入的一些信息,我们是可以对它进行验证的。好,那我接下来我们看一下怎么来实现它。通常呢我们会创建一个序列化器, 那这个蓄力化器在哪呢?就在我们的这个应用中,我们来创建一个文件,叫做 serializers, 点 py。 接下来我们从 rest free mark 中来导入这个 serializer, 然后我们创建一个蓄力化器,我们来定一个 la class, 就给它叫做 movie list serial leisure, 让他继承这里的 serializers。 第二, serializerly, 然后接下来呢这个流程就像我们写模型一样,我们要序列化的字段给他依次写出来,比如说 id 这个字段,这是一个整数,所以呢我们使用 seer realizer。 第二, integer field 这个字段呢,通常是只读的,所以呢我们可以使用 read only 这个属性给它设置为处。接下来第二个是电影名称, 它是一个自助串,我们使用 zero leisure's 点儿 charf field。 然后呢设置一下它的最大长度 max lens, 以此类推,我们可以把所有的全部写到这里。由于这个 movie 表次数太多了,所以我们就写两个。 ok, 那接下来我们就可以在我们的试图文件中来导入这个,来导入这个序列化器 from 点 serializers input, 我们刚才定义的是 movie list serializer, 这里呢我们就可以修改啦。 首先我们来获取这个 movies, 它呢就是我们的查询对象 movie 点 objects, 点 啊,接下来呢,我们导入这个 uv list serializer 来实地画它, 实力化的时候把这里的 movie 对象给它传进去,这是一个 query object, 也就是查询对象。所以呢,我们需要设置一个参数,叫做 many, 给它设置为 true。 接下来呢给他复制一个新的变量,就叫做 see a realizer, ok, 那么在使用 jason response 返回数据的时候,我们这里返回的是 serializer 点 data, 这样的话我们就大功告成了。接下来我们来看一下接口能不能实现这样的功能。 a p i a p i 枯萎,这里包错单词拼写错误,再回到我们的 cereal letter 这里, less 单词片错误。好,重新启动一下服务, ctrl c 重新启动。接下来我们再访问这个接口, a p i 母尾, ok, 这回我们再看一下 访问 a p m 尾。那此时呢,这里我们就获取到了所有的电影的数据,包含了两个, 一个是 id, 一个是 movie, 这是因为我们在序列化的时候,这里我们设置了两个字段,一个是 id, 一个是 movie name。 再来分析一下,这是我们的视图文件,在视图文件中我们要获取的对象是电影对象,所以呢,我们使用 movie objects 来获取,这是一个 query 对象。 接着我们导入这个自定义的 siri leisure 类,也就是虚净化器。然后呢,传递这个 carry 对象,传递的时候一定要注意,这里是 carry 对象的时候,这里需要设置 mini 等于处, 最后呢,再把它得到的序列化后的数据返回去给这个杰森 response。 所以说呢,在使用这个 d r f 的时候,我们重点是创建这么一个 serializer py, 把所有的需要序列化的内容全部放到这里,然后对字段进行相应的处理, 这就是一个最简单的 d r f 的实力。好,本集我们先介绍到这,小伙伴,我们下节再见。

在 jango 项目的跟 url 之下,有一个名为 admin 的 path, 后面的阿德密模块就是为了管理员准备的,对数据库进行出精华界面管理的工具。 启动开发服务器收入 hathan manage their pi round server, 带浏览器进入格子密 url, 输入新建的管理员的用户名密码 登录后就可以看到可以管理的数据。目前仅能看到粘购项目初始化后一些默认的数据。 users 和 groups, 在 users 页面可以看到我们使用 create super user 命令创建的管理员用户。 这里的艾特密界面并不是面向所有的网站用户的,仅供几个对网站有管理和维护权限的用户。

哈喽,大家好,这一节呢我们来看一下张狗 rest from work 这个框架啊, d r f 呢,其实就是对这个框架的一个简称,它是一个强大而灵活的一个工具包,也就是张狗的一个第三方包啊,它是用于构建这个外蒙 api 的啊, 下来我们来看一下它到底帮我们解决了一个什么样的一个问题啊?那 d r f 的这个序列化器,它可以将张狗模型的这个对象序列化为 jason 以及叉 m l 等格式的这个数据,他反过来也可以将前端给我们发送的这个 jason 和叉 m l 等数据的格式反序列化为章狗的这个模型对象 啊,使得数据的这个传输和转换变得更加简单方便啊,就说输入和输出数据 他在内部帮我们已经处理掉了,不需要我们再去手动的去啊,对各种格式进行另外的一个解析啊处理啊,这就为我们提供了一个方便下来就是一个便捷的一个请求和响应的一个处理机制,可以很方便的对请求进行验证、 过滤、转换等操作啊。那接口的开发啊,可能说我们大部分时间是要提供给 别人去使用的调用的啊,那么如果说我们不对接口进行数据的一个验证和过滤等一些权限的一些问题的操作的话,那谁都可以调接口的时候,我们的 我们的这个服务器的安全性啊,以及各种是不是就会存在问题啊啊,他还可以很方便对响应的这个数据 进行格式化、渲染等操作啊,使得我们在开发者啊可以更加灵活的去控制 a p i 的这个行为和输出啊, 那他是深度与张狗的这个 oim 深度融合的啊,他提供了非常多的高级用法,快速生成增山改查的一个 apn, 他既提供了底层,也提供了一个。呃,与张狗 oim 深度绑定的一些一些试图方法啊,可以快速的将我们的 模型啊转化为接口,是我们给我们提供的一些方便。下来我们来看一下这个 具体来如何使用啊,它安装使用也非常方便啊,就是 python 经典的安装第三方包的方式, pip instyle, 把它安装一下,然后把它添加到这个 a p p 列表章当中,就注册一个 a p p, 其实就是相当于啊张狗的一个 app 啊,然后把他的 ur 给他引入进去就可以了。好,我们来操作一下,这是我们的项目啊, pip 一个 instyle, 一个 jungle rest f r a farm f r a m e w o r k farm work 啊,张国 rest farm work。 来,我们把它安装一下。 好,已经安装上,安装上之后我们还要对它干什么?是不是在项目的 sentence 的 py 当中,这个 insideless a p p s 当中把它注册进去啊?我们在这儿直接给一个 rest fun work 注册进去, 然后还要在这个跟 u r l 当中,是不是把它这个可浏览的一个 a p i ur 给它引入进来啊?是不是?那我们把它给它引入进来,快速的把这几个操作一下啊,看这个 copy 过来,这个格式有问题, 来把这个引号啊,这个格式给他改一下。 include include。 这个啊,写错了啊,这块来 include。 好,这样子我们就引入进来,引入进来之后,我们这个张口 rest 方位,我们就可以开始使用了啊,不需要再做任何操作了。那么一般的使用方法呢?其实就是说在这个 vivos 当中,我们先来看一下啊,上一章节我们通过啊张口默认的这个 vivo 类啊,实现了一个这样子一个接口, 那把这个重写一下,用 a p i view 啊,就是用这个 rest fun work, 这个给我们提供的,我们新建一个 a p i v i e w 点 p y 的文件啊,我们跟这个来区分一下啊,他首先要引入一个什么 from 一个 rest fun work, 一个, 呃,第二一个 decreases, 呃,装饰器啊, impart, 一个 api vivo, 它也分为啊两种视图方法,也就是说 它函数式式图啊,它和张口的那个函数式图基本上是一致的,但是它唯一的区别是什么?它要依赖于啊,它的核心功能是由这个装饰器来实现的,就是 at a p i v 五这个装饰器来实现的。还有一个就是类式图,它所有的 我们下来所有的试图都要继承 api vivo 这个类,那该类的这个核心啊,他是继承张国的 vivo 类来拓展而来的。我们可以直接在代码中先来看一下这个函数式试图啊, define, 比如说我们一个,我们先一个 test, 把它一个 request, 然后我们要瑞特一个返回一个什么,是不是一个 h, 一个 response, 一个响应啊?但是这块响应我们就不不能再用到什么了,张哥为我们提供那个 http response 那个响应器了,我们要用 drf 为我们封装的这个 from rest from work 点 response 他啊,他就封装成这个响应啊,我们直接来他,他可以返回一个字典啊,比如说我们 message 啊,就是一个 ok 返回这样一个数据,那这样的话你还不行啊,还需要用的这个装饰就是 at apiv, 把它给它引入进来啊,引入进来, 引入进来之后下来就是在这个 url 当中,和张狗的这个 url 用法是一致的,把这个文件先给他引入进来 api vivo, 然后我们把这 copy 一下啊,他们的用法基本上一致啊, pass, 比如说我们这个 test, 我们给它一个 test vivo, 这就不需要 as vivo 了,对不对?它是一个函数式式图,这就是 a p i view, 点一个 test, 然后我们再给它 the test 啊,我们先举个例子啊,然后把项目跑起来 run sever 一个 vlog, 对吧? vlog 里边有一个 test, 你看它是不是它渲染出来是一个可视化的 a p i, 它走的是 drag rest for work, 为我们提供的一个默认的一个模板,渲染出来直接就是 jason 的数据啊,这个就是 jason 的数据,你调接口的时候就可以拿到这个,那么 他这样的一个普通的视图如何来实现我们与张口的这个交互呢? 或者说我们先来看一下他是如何来进行一个数据较验以及数据返回的啊?那么比如说我们还需要引入他一个序列化器,我们现在在这举个例子啊, from 一个 rest from work impart 一个 ceo lesser 啊, 这就是他的提供的序列化器。假如说我们有这样子,一个 class, 一个,嗯,我们就给他一个 test est, test 一个 sale leather, 比如说这有一个 lame 啊, lame 就是名称,年龄,比如说,呃 max, 它必须要有一个长度啊, 它也必要有一个验证器,就 marks 一个 nance 的话是 l e n j t h nice 等于十,然后这个 integr 的,呃,这个 integr feel 的,它是不是一个数字类型啊?是不是?这个我可以给它一个大写值,比如说最大等于一个呃,十, 最小为一啊,这样子,我们给他这就是验证一下啊,验证一下,然后 我们如何来做返回这个数据啊?比如说我们现在要让他支持一个支持一个 get 和 pose 的请求,我们就可以在这传入一个列表,然后给他一个大写的 get 和 pose 请求,我们可以通过在这来判断 a f 一个 request master, 抖音一个 get 的话,我们来返回这个数据,否则是不是他就 else, 我们就默认他为 post 啊 post, 那么就可以来用这个 sale leather, 比如说 sale leather s e a sale leather 等于一个什么 test sale leather, 然后 data 等于 request their data, 这个 request their data 就可以从 前边啊,从前端获取到为我们传递进来的这个 jason 数据啊, jason 数据我们就可以拿到, 然后对它进行一个验证,比如说 if sale laser is video, 它验证通过了, print 一个,呃, print 验证啊,验证通过 e l s e 这是不是就是验证失败啊?来 验验证失败,那这样子我们算现在给他返回这个验证通过的时候,我们给他返回一下这个,哎, return 一个 response r e s p o s e response message 等于一个 ok, ok, 然后这返回它错误的时候,我们给它一个返回一个错误的信息啊,就是 e r o r 啊,这就是一个简单的一个 一个函数试图的这么一个请求过程,我们来看一下啊,现在我们来看一下这个接口 test, 我们现在来刷一下。 哎,你看他拒绝连接是为什么?我们这发生一个错误。 marks, nice, 没有这个吗?是不是加一个间隔啊?我们来点进来看一下他这个 mark, nice, 对,这有一个间隔符啊,我们写错了, 写错了之后让 sir 重启一下啊。哎, max, 这 个没有。 max, 来点进来看一下这个啊, max, v 六和 mix v 六啊,他不是这样子的啊,来把它改一下,他要带上 v 六, v l u e a l u e, 它的参数错了啊,没有没有,那两个关键字参数。好,现在就来再来看一下啊, 你看它是不是默认给我们返回的是 message get 请求啊?是不是? get 现在我们这块的这个数据 in tagger field, 我们现在来看一下啊,我们在这随便给他传传一组数据,他是如何传递数据的啊?看一下,直接在这一个字典,然后这必须要双引号开头啊,对不对?双引号。 哎,来,这是一个 lame, 比如说 lame 等一个啊,张三,然后他的年龄, 年龄的话就 age, 比如说是一个。呃,他比较 这限制的是什么?限制的是最大为十,最小为一,我们给他一个五,行了吧。五,我们把这组数据先给他 copy 一下。 copy 一下啊,保存起来,然后 post 点这个 post, 你看他返回了一个 message, ok, 是不是?是不是他交互他走到这里了,你看验证通过,他走到这了, message, ok, 那如果说我们填写一个错误的信息的话,比如说这块 copy, 他不是不能大于十吗? 我们给大家都写一个十五 post, 你看返回了一个 l 啊,这就是一个请接口请求的一个他验证失败一个基本的逻辑,那我们如何让他自动给我们交验呢?其实很简单,我们把这一块给他删掉,然后在这个 as civilizer, 在 is video 里边,它有一个参数叫 r a s e, 这个 express 给它设为 train, 它就会来自动去校演。 比如说我们这儿直接返回这,我们这儿只返回正确的数据啊,比如说我们就把 several letter 点 data 获取到的数据给他序列化的这个啊,成功的数据给他返回出去就可以了。然后我们再来看一下啊,再来试一下刷新。比如我们现在给他传的五张三,然后我们 pass 他一下, 你看是不是成功了,他给我们返回出来,那我们如果把这个五改为一个十五的话,他是不是大于我们那个十了?你看他给我们返回了个 h, 请确保该值小于或等于十, 这就是他的序列花器帮我们做的这个事情,我们只需要这样子去传递数据就可以了。他其实他的作用和什么相似啊? isavido, 如果说啊,你对张口那个 form, 表单那个教练熟悉的话,他其实就是和表单那个教练的那个 意义啊,这个意思其实是相等的,相等的,只是唯一不同的就是啊,他把这些表的这些数据全部给他序列化成了什么 jason 数据,或者是指定的格式的数据给他返回出去了,返回出去了,那么我们 通过这种方法快速的来实现一下我们那个什么, 上一章节我们学的那个 catch great, 那个列,那个列表,我们给他来实现一下啊,我们先把这个注视掉,把这个给他注视掉的话,那我们先要给他来一个序列化器,对不对? class 一个 category, c, a, t, e, g, o, r, y, category cell leather, 那么它可以用调用这个 cell leather, 点 cell leather 手动去序列化。也可以有一个啊,我们来通过这个它和 jungle 的这个 模型绑定的时候,可以调用这个 model sale laser 啊, model sale, 然后给他一个 class 一个 met, 比如说,嗯, model 等于什么 category, 对吧?我们把这个 category 还没有引入进来,我们先引入进来 from 第二一个 models impart 一个 category cat grade, 然后 fields 啊, f, i, e, l, d, s, 等于一个,比如说刚刚二就是序列化所有的 字段,那么他叫验的规则是什么?他叫验的规则其实就调用的是我们这个模型中的这个规则,比如说你这 max, nice, 等于五十,他就要叫验这个啊,其他的这些数据都是啊,继承这个模型里边的你,你也可以这样子,也可以手动的去 name, 等于一个 civilizers 点儿叉 field, 你比如说你那个,你感觉啊这个模型中大 当中给他的这个数据效应,这个五十太长了,我们这只需要给他十,只需要让他传递十个,我们可以在这重写一下啊,他可以,他就会直接走到这个这个字段,这个序列化器当中去啊,下来如何在试图中使用啊?比如说我们就用这个 函数式式图啊, define, define 一个 category c, a, t, e, g, o, r, y, 他也传递是 request, 这个 request 其实是封装过的 jungle 的一个 request, 比如 pass, 那么这个序列画器我们如何使用?嗯,是不是我们先要把这个 query set, q, u, e, r, y, s, e t 等于什么? category objects? 点二,然后 cat grade the sail laser, 把它的序列化器,你看如何传?把这个 query set 啊,要给它传递进来,它可以传递一个 query set, 就是把这个数据传递进去,然后把这个参数 many 等于 trin, 也意思是什么?意思?就是说他返回的数据上是多少,是多条啊?是一个列表的时候,他就必须要设置这个单条的时候,你就必须要返回这个 fils 啊, fils 就是返回一个单个对象的序列化的时候,这必须为 fails。 多个对象序列化的时候,这要这是必须为 tree 啊。 many 等于 tree, 然后这个就是给他一个变量 civilizers, civilizer 等于,然后我们给他一个 return response civil, 再逮它啊,现在我们来走一下这个 api, vivo 点太少,我们刚才把那个试图是不是注视掉了,这个 url 就找不见了,那把这也给它注视掉,把它 copy 一下, copy 下来,我们这个 apa category c a t e g, o, r y 那 a p i 为我一个 category name 的一个 category list。 刚 a p i 啊,我们把它给它起一个这个名称 啊,这个名称,然后我们再来,在这儿就没有这个了。 a p i category, 你看它是不是自动把我们查询 到的这个数据给序列化出来了。 get 的时候序列化出来,那他这块你看,我们默认允允许了,他有一个 pose 的请求,有一个 pose 的请求,所以他呢?出现了表单,把这个 post 给他 删掉的时候,你看一下啊,删掉现在我们来刷一下,你看这个表单就不见了,嗯,不允许他有 pos 停 pos 的进球 啊,这就是他帮我们内部序列化的。那是一般的话,我们在做大型项目的时候啊,比如做项目的时候,我们不是这样子来构造这个文件结构的,也不会,也不会用到这个函数式视图。这个函数式视图啊,他是一个非常底层的,比如说你不需要和 张口的这个 oim 去交互的时候,你可以用这个函数式图去做一个比较比较偏于底层的一个。那一般的话,我们和 oi 和模型交互的时候,我们会用到这个类式图。

嗯,哈喽哈喽。呃呃, 今天写了一个小东西,是我们工作中要用到的,就是主要就是,嗯,给自己一个记录吧,就是比如说,呃,我做了什么项目,然后有没有拿到钱这种的,以前我是用一个 cl 机,然后,嗯,最近,嗯 嗯,不是新学了那个张狗吗?然后就想用一下用那个张狗练下手,然后 就新建了一个,这样这样这这种啊,这样子的项目主要是记录,就是,呃项目经理,然后销售项目名称,单位名称,系统名称,系统级别,项目奖金,完成时间,呃这个东西呢,其实,嗯 就只有对于我来说是比较有用的,因为,呃我写了这个系统之后以后我做了什么项, 然后什么时候完工的,呃,有没有拿到钱?拿到钱是多少?这个东西我就有一个记录了。嗯,我写了还没有写完,其实大大字都是这样子,大字是这样子,呃,然后就简单看一下,呃程序运行起来的样子, 嗯,先给他重重新启动一下啊,重新启动一下, 就从一开始呃项目的起源开始跑一遍这个项目, 呃首先有一个真假书本的真就真假项目的那个 界面,我写了一个增加项目的界面,啊,是这样子,增加项目里面有这些内容,然后把它加上去,比如说项目经理叫叫 海贼王吧, 销售甲鱼叫程咬金,呃,单位名称甲鱼叫 神经病有限公司,有限有限公司,就这样吧,然后项目名称甲鱼是等宝测评,那么网系统名称甲鱼是叫, 呃,吹牛逼,有吹牛逼系统吧,吃牛逼系统吧,然后系统级别,然后假如是三级,然后项目奖金,假如是分了 这么多钱,然后项目完成时间,假如是是这个,然后备注,假如是这是我的第一个项目, 然后添加,添加完了之后他会自动到项目展示的这个窗口,然后就会显示在最下面。呃,然后这个可以返回去继续添加,比如说海贼王,海贼王,二二二吧,再添加, 然后又会,呃,添加到最下面,然后这个有删除的按钮,比如说我这个二二不想要了,点删除, 然后这个就没有了。呃,然后还有这个是编辑按钮,就是把你之前的项目进行编辑,比如说,呃,项目经理,假如叫 花西子啊,销售,假如叫叫猪八戒吧,然后项目奖金假如叫五五,然后时间也改一下, 改成十二月四号,备注假日给他一一一,然后提交。然后 嗯,就是这个之前改的是第一个,然后这上面的内容都会都会变,然后这个里面还有个跳转的,跳转的就新增项目,就可以跳转到新增项目里面去。嗯, 这个后期还得再改一下,因为就这样子看特别不好看,我打算这样子,就是,呃,一次性看十条,然后 搞一个分页,就这样子,嗯,然后代码,代码, 代码挺多的,然后这个前端的一些东西,呃,我是不会写的,然后我在模板上面 copy 过来的,我自己改的,嗯,反正, 哎,就这样吧,将个感觉,呃用的是很舒服,但是要学的东西还是挺多的。嗯,现在就这样吧,过了,拜拜。

hello, 大家好,这一节呢,我们来看一下修改邮箱的这个接口,那修改的时候啊,需要对新的这个邮箱进行一个验证,确保它是未被使用,以及是一个真实的邮箱地址。那么这一块我们的思路就是沿用 注册时邮箱验证的那个思路,继续使用这个继承邮箱验证的那个序列化器啊。当然这个当多次在不同的地方使用这个邮箱验证序列话器时,应该是要对验证码的类型判断的,也就是它的来源,比如说 他是注册时的一个验证码啊,是一个修改营销时的一个验证码,要对,要给他一个标记啊,但是我们这没有啊,没有给他传递这个标记信息,那么没关系啊,我们只是对他的一个呃 啊,真实性进行一个验证,这样子也是可以的,虽然这是一个小 bug, 但是我们后期啊,在统一处理这个东西。好,我们直接在代码层面来看一下这个。首先呢,我们是不是先要做一个序列化器啊,要继承这个来 class 一个 update, 一个 email, email 一个 severalizer s e r i a l i z e r severalizer 让它继承的是什么? severalizers? model civilizer, 然后还要继承是不是验证邮箱的那个为 对于二 email code civilizer, 把这个序列花器啊,验证邮箱的这个序列花器也给它继承过来,让它在这里。好,那这块 classmate 的话也是 user, 然后把这个 id 啊 id 我们一定要给他加上,是不是这一块把已没有和扣的要给他传递出来,因为这继承之后是不是有了已没有和扣的,那么这个已没有,是不是我们的唯一性也要对他进行一个验证?其实把这块啊,把这个给他拷配过来就可以了, 我们给他显示的啊,在这里调用一下,然后我们给他一个注视调修改 油箱啊,序列化器,那么这块我们在这块是不是还有一步要做啊? define 这个 video data 的时候,把这个 code 是不是也要给它剔除掉啊,那么就是这样子啊,之前我们已经做过了, a t t r s 等于一个 video data, 然后 d a t t r 把这个扣的给它去掉,然后给它返回 a t t r s 啊,这样子就可以了,那么就开始去着手我们这个试图了啊,试图的话,我们还是沿用这种试图集,然后通过 x 方 装饰器的方式啊,给他来做一下,然后 defy 一个 update 一个 email 啊, email, 然后 self sel f 一个 request, 对吧? r e q u e s t request 是必须要传的,那么我们要用到它的一个详情,是不是我们要给传递一个 pk 啊, pk 的一个浪啊,一个浪好,我们这 pass 一下,然后把这个 action 给它装饰上啊。 ant, 一个 ac action, 我们还没有引入,我们把它给引入一下 来,在这 from 一个 rest fun work their decrease 一个 import 一个 action 啊,把这个装饰器给它引入进来。 a c t i o n action 一个来 mess 的,让它走 post 请求啊 detail, 我们把这儿给它设置为 train 啊,设置为 train 就是它可以读取到 当前对象的一个详情啊,也就是说我们在这个 instants, instant 等于一个 self 点 get object 就可以拿到当前的一个对象,对不对?就可以拿到当前的对象,那么我们在这就要进行一个序列化中序列化的一个验证了,就是在 在在 s e r c o leather 当中啊, s e r r a r a l r 的 e r c o leather 中验证邮箱是否已存在,我们刚才是不是已经在这儿继承了它进行验证过了,所以我们就直接在这儿走,把这个 c o leather 给它拿过来。 insects, 我们初始数据给他传递过来, data 等于一个 request data 获取到前端传递过来的数据,然后对他的一个进行验证,然后走一个, 这里就不是 save leather 点 save 了啊,我们不需要让他走 save 的这个方法,我们应该在这里真正的走到走到走到修改逻辑啊,逻辑就是通过修改这个 instants, instants 点 email, 它等于这个 several letters are 点 video data 有没有对不对?是不是?走到这里,然后调用这个模型的一个 say 五方法是不是就可以了?调用这个模型的一个 say 五方法,因为我们已经对 这块进行了一个验证,验证通过了,我们就直接给他复制 c 五就可以了啊,这样子我们就完成了一个修改的,那是我们这不要给他返回 cellular 的逮他了,我们直接返回一个提示就行了啊,比如说 message 等于一个 修改成功啊,修改成功,但是这个 cell 附带 get cell letter, 你知道他掉的是什么?他是不是掉的是这一块的 severalizer class 啊?所以说我们刚才重写的那个 severalizer 并没有给它运用到这里,我们还需要做一步啊,在这里要进行一个判断, self 第二一个 get several leather class 要判断这个 action, 当这个 action 等等于 update email 的时候,我们要调用这个走到这个序列化器当中去,是不是?那么把这个序列化器也给它拿进来 update 一个 email, sale leather 啊, sale leather 啊,这个 action 我们是不是之前已经讲过啊?他的 action 可以判断 啊,判断他走的是哪一个视图啊?当这个 action 为这个视图的时候, update 已没有啊,这个名称的时候,你不信啊,我们在这里可以来先不管啊,先在这 print print 一下这个 self 点 action 啊,我们来看一下啊,看一下,来这个接口的话,它试图机我们不需要处理它的 url, 直接加上这个 就可以了,对不对?那么我们,哎,我们的这个拖过来啊,拖过来,拖过来,一个幺二七点零,一个八千八千,一个 user user info, 一个一 user user user info 是不是有一个十二啊?十二,我们的 test 应该是个十二,你看身份认证信息未提供啊,就是没有登录啊,没有登录,那我们看这儿,我们这儿有没有 season 啊? season 是有的,那么给他登录一下 来,没有登录,登录一下,登录一个 test, 然后是一个密码,好登录成功,你看他是不是拿到了这个信息,我们 我们只需要在他后边加上这个 update email 斜杠,然后访问,你看他这是不是用户名,电子邮件地址,然后这他调用的这个是不是我们原先的这个 sell 来着?有则应否 sell 来着?用户名和已没有,对不对?你看这他返回的是 update email 啊,在这看 是不是好,那么我们就需要在这来给他判断一下,如果你这个 action 等于 update 已没有这个视图的时候,我要让你重新给我加载这个序列化器。 来,我们再刷一下,看一下这,你看他是不是变成了邮箱和验证码了,那么我们随便输一个邮箱 at qq there come。 然后一个随便输。好,我们先看一下,你看他这个验证码是错误的,因为 我们还没有获取这个验证码,那我们这个接口来幺二七点零一把这靠过来吧。哎呦, 来获取验证码的 for send 已没有扣的啊。这个。然后我们给他一个,比如说 test qq 点 com past 一下,我们发一个,你看发了一个 g l o k g l o k 来,放到这,我们刚才用的是 test at qq 点 com, 对不对?我们 pass 它一下,你看,修改成功了。修改成功。那我们看一下我们的后台啊,后台 选择用户 test, 你看,它变成了这个 test at qq 点 com 了啊,我们再修改一下啊, 看一下他这个验证啊,能不能起效果啊?比如说,我们用 and me qq and me and qq 点 com 来获取一个验证码。 post, 我们都知道这个 and me and qq 这个邮箱已经被用过了,被用过了,所以说我们在这来看一下他这个验证是不是会起效果 来。验证码 and me at qq there come。 我看修改能不能修改成功啊? post, 你看它是不是给我们返回了一个邮箱已存在了,你就不能再用了,你得换一个新的邮箱,换一个新的邮箱,还得去请求这个 发送邮件的这个地址啊,发送邮件这个地址啊,那么通过这样子一个简单的一个处理啊,我们这个修改邮箱的这个功能就已经实现了。好,这一节的内容就这些啊,谢谢大家。