那么我们现在来看一下 cook 加密, ok, 我们首先来看一个比较简单的红花顺,哦不,是静态 cook 的处理方式 啊,什么叫做静态哭魁呢?静态哭魁啊是我对他的一个命名,在咱们的技术行业当中,他被统称为叫做技术啊,统称为叫做哭魁处理啊,但是老师我把它区分叫做静态哭魁,因为他是一个单独的静态页面的处理, 我们来看一下静态 cook 的处理方式哦,像静态 cook 它是怎么处理的嘞?首先你看啊,我们来看一下啊,这里有关于一些内容的一些解说啊。首先啊,网站返回的页面是为静态数据,但是当我们执行 recite 请求的时候,他给 给我们返回的是非正常数据,非正常数据啊,那么像在这里他会出现一种什么情况来,就是我们第一次写,一般是这样的,他首先是第一次 请求不携带 cookie, 会获取一段 g s 代码,然后我们截取这一段 g s 代码来生成,对吧?获取 g s 代码来生成 cookie, 对吧?传入第二次请求,然后请求成功, 它大概是这么一个逻辑啊,它是这么一个逻辑,就相当于它同一个接口是做了两次响应,第一次响应是响应了来生成 cook 的代码,第二次响应来响应了成功的数据,但是第二次响应它要获取第一次生成的那个 cook, 要进行携带,如果不携带,那么 就会导致请求失败,那这是啊,关于静态 copy 啊,当然动态其实很多也是差不多的,我们来看一下吧,来看一下这个网站,这是一个国外的网站啊,那么这个网站的话当中会有一些数据,是吧?你看会有很多的一些啊数据来我们看一下,对吧?很多, 来我们打开抓包工具,你看打开抓包工具,打开抓包工具之后啊,像这里我们首先来看一下它的格式是否为静态接口,我们进行页面刷新,当我们进行页面刷新之后,因为这个是国外的网站啊,所以会有一定的延迟, 然后刷新了啊,刷新之后啊,我们来确定一下这个接口它是不是静态页面啊?我们点击文档,在文档当中我们可以看到会有一个 document 的一个接口,我们把它点开点击预览, 在预览当中我们是能够看到浏览器当中的信息的,大家有没有看到?你看可以看到他,看到没有可以看到他, 那么像这种它包含在 document 里面的这种都被统称为叫做静态数据,也就是说你能够直接使用正则表达式或者叉 pass 或者 viquery, 能够直接来对它进行数据提取的。 你们一般像动态数据的话,他就看不到啊,动态数据他就看不到,你就比如说啊,我们昨天学习的,你看我们昨天学习的动态数据, 要你看啊,啊,我不就我随便看一个吧。比如说我们像昨天我们学习的,像这种动态数据啊,我们这种动态数据我们就看不到,你看啊,我们来刷新动态数据的话,你看啊,他是不是也有这个 doctor 门头,但是在这个 doctor 门头里面他是一个空白的,大家有没有发现他是一个空白的,那么像这种就代表他的 数据接口是为动态加载,把动态加载由后端渲染过来的,那么如果说像这种他能看到的,那么就被称之为叫做纯静态页面,静态数据, 明白吗?那么我们像在这里啊,我们可以来看一下啊,我们首先可以做这么一件事情来清空他的数据,你看清空,清空之后来清空他的 cookie, 来点击 cookie 删除,把 cook 全部删掉,删掉之后重新加载。这个地方要勾选勾选保留日记啊,勾选保留日记,你看勾选,然后点击重新加载。当我们去加载的时候,同学们你会看到这个网页,他加载了两次, 看没有同一个接口,做了两次请求,首先他的第一次请求,在这个时候我们可以看到第一次请 请求是不携带顾客的,他会返回一段 g s 代码,但是因为我们的浏览器对他的缓存进行了清除,所以导致我们在浏览器页面当中我们看不到他,对吧?我们看不到他。那如果说我们用抓包工具的话,我们是能看到的啊,或者说直接发送请求也是可以的啊,你看我们用一个抓包工具, 比如说我在这个地方啊,我用青花瓷,好吧,你看我用一个抓包工具, 我们用一个无痕界面啊,来,我们开一个无痕界面,来,你看我用抓包工具啊, 好,我们打开一个无痕窗口,来开一个无痕窗口,来开一个新的无痕窗口,然后我们像在这个无痕窗口当中进行该网站的访问,然后当我们去访问他的时候,我们能够看到我们的抓包工具啊, 已经去成功的截止到了他的数据,对吧?监听到了啊,你看我们稍等他一下啊,他是一个国外的网站,下载会稍微有点慢 啊。这个国外的网站啊,加载有点慢啊。其实我们也可以看一下国内的,国内的话像央行,央行的话他也会涉及到央行跟他是一样的,央行的那个,呃,一些招标文件他都是跟他一样的啊,我们可以看一下在这个时候啊,他其实已经有返回了一些接口, 对吧?返回了两次接口,只是说他的接口现在还没有数据,但是我们可以看到你看在他的第一次请求里面,你看他都是携带了一堆 gs 代码,看没有,对吧?啊?不用挂梯子啊,不用挂梯子啊,他只是比较 慢而已,来,你看。哦,那么我们能够看到的是你看同一个接口做的第一次请求不携带 cook, 不携带 cook 的情况下,他请求的话会获取到的是一段 g s 代码,对不对?获取的是一段 g s 代码,然后再做第二次请求,第二次请求会携带 cook, 你看第二次请求他会携带一个 cook, 看到没有?它携带了一个 cookie, 那么像第二次请求所携带的 cookie, 它会导致它请求成功,然后正常获得它的一个正常页面。 你看,虽然说浏览器没有给我们显示啊,已经显示了,是吧?你看我们可以看到在做第二次选择的时候携带第一次 gs 生成的代码 生成的 cookie 啊,携带第一次请求获取的 g s 代码来生成的 cookie 来进行请求,可以看到它就会请求成功,看到没有,它是这么一个逻辑,如果我们直接对它 发送请求会有问题,哼哼,是吧?好,那么我们现在这里啊,我们对它的原理啊,我们也稍微明白了一点,对吧?那么我们现在我们来尝试对它进行请求,来,我们来看啊,我们首先来对它进行两次请求,来清空 cook, 然后进行重载, 这是它的第一次请求,那么我们使用鼠标右键点击复制 c e y l, 我们来快速的编写一个爬虫, 来快速编写一个爬钟,我们来请求第一次,第一次请求不携带 cook, 你看啊,第一次请求不携带 cook 来创建一个 python 文件 来,这是第一次请求不携带 cook, 然后第一次请求不携带 cook 的话,他会给我们返回一段 g s 代码,对吧?一个 h t m l 的 g s 代码啊,我们要筛选啊,你看,我们执行一下, 让我们来看啊,我们能够看到的是,当我们像在这边,如果不携带 cook 啊,不携带 cook 执行第一次请求的时候,哎,他有点延迟,是吧?啊?可以看到啊, 当我不携带顾客执行第一次请求,他告诉我们说 gs 环境没有启动,让我们启动环境,看到没有?让我们启动 gs 环境,对吧?而且上在下方,他告诉我们了,告诉我们在这个地方他返回了一串 gs 代码,看没有,对吧?他返回了一串 gs 代码 啊,返回了一串 g s 代码,这是它的一个构成,那么我们现在把它的这一段 g s 代码对它进行复制,来 ctrl c 靠北, 然后我们找一个在线 g s 格式化,那把它来。这种比较简单 啊,像这个比较简单啊,基本是固定的,没有什么呃变化的那种,所以说比较简单,等一下我们会学一个动态 cook, 动态 cook 的话就是说它的 g s 是变的啊,每次否获得的都是新的 g s 那种难度可能稍微高一点,这个比较简单, 那我们对按格式化来格式化减少,然后当我们像在这里把这个 html 标签要全部删掉啊, html 标签全部删掉,只留下 gs 代码来点击复制,然后我们去创建一个 gs 文件,放到代码同路径 来,我们来创建一个 w e。 好,你看那么像在这里的话,我们就可以看到这串代码是由我们做第一次请求所返回所 获取到 gs 代码,对吧?那么我们像在这里我们要学到一个新的东西,一般我们涉及到这种 cookie 的时候,我们都会涉及到浏览器环境, 那么什么叫做浏览器环境呢?这里我跟稍微大家讲一下哦。浏览器环境是因为在整个浏览器当中啊,他会有很多的有浏览器自带的,比如说像他的一些啊,页面检测,或者自动化驱动程序检测,或者说页面指纹检测,或者他的呃引擎检测以及等等等等, 那,那么像这些都被统称为叫做浏览器环境。那么像浏览器环境的话,我们本地是不具备的, 我们本地是不具备的,因为我们的本地是直接通过解释器来进行运行,对不对啊?我们本地是直接通过解释器来进行代码的运行的,但是浏览器是不一样, 浏览器它怎么运行界赛马呢?浏览器去运行界赛马,它都是通过它自带的引擎或者内核来进行代码的驱动, 对吧?跟我们的解释器是不一样的,所以他们之间就会有很大的区别,就是会缺失很多环境啊,缺失很多环境,那么在浏览器当中你可以看到他是有很多环境的,比如说我们最大的环境就是 wind, 整个窗口 window 到其次还有像 location, 对吧?或者说,呃, document 对吧?以及等等等等等等等等。啊,它会有很多环境 啊,这个是基本的浏览器信息检测,你看里面会包含基本的浏览器信息,对吧?里面还会包含我们的驱动驱, 驱动为 force, 对吧?你可以看到这里还有 ua 浏览器类型,对吧?等等等等。啊,它会包含很多环境啊,环境了解一下就好了,我们今天讲的不多,我们不会用的太多。五、环境的话,这个是属于进阶高级级别的。好吧,我们暂时先不会去涉及太多, 但是我们要了解一下啊,在这个地方的话,我有对环境进行一个基本的统计,大家可以了解一下环境。
粉丝106获赞270

追战是个啥?这个事情啊,要从打工人 cpu 说起。 cpu 内部有个核心模块叫 alu, 专门用来做逻辑运算和数学计算,比如一加一等于二,啊呸,等于一零之类的。 我们人类算数学题的时候,如果算式比较复杂,没法一次性算出结果,会先把这两个数相加,得到临时结果,再把临时结果和剩下的数相加。同理,在算式复杂的时候, alu 也是这么做的, 这就需要把临时结果找个地方存放一下。于是工程师们在 cpu 内又设计了一些可以存放数字的模块,叫寄存器,他们的名字分别叫 axbx、 cxdx 等等等。没错,在如此高大上的 cpu 内部,起名就是这么随意。 有了计算器, alu 就可以把临时结果保存在计算器中,需要的时候再拿出来用,这就解决了复杂算式分布计算的问题。为了实现更复杂的计算,能不能做很多计算器呢? 答案是不能,这会增加 cpu 设计的复杂性以及成本,于是只能从外部请帮手了。大家想想这个帮手需要什么样的条件? 最关键的一点是补血速度要快,毕竟 cpu 可是个急性子,按照这个条件招标,最后中标的是内存,而硬盘和软盘、公盘都因为速度太慢成了陪跑了。 接下来要在内存中画出一篇专门的区域,用来临时存储数据。既然是专用的,就得有个名字叫做站。注意啊,内存里还有的区域叫堆,和站的特性很不一样,以后有机会再 和大家聊。所以说,站在本质上只是内存中的一片区域,它的特殊之处在于, cpu 从中存取数据的方式大家都见过,给蛋侠装子弹吧,把子弹一个个往里压, 最先压进去的处在弹侠的最里边,在射击的时候,这颗子弹会最后一个被打出去。简而言之呢,就是先入后出,相应的后入先出规则啊,非常的简单。 cpu 一看,哎,这个东西好, 因为在计算机内,很多时候对数据的操作都有这种先入后出的特点,于是 cpu 一拍大腿,决定对对战的操作也遵循弹侠操作的规律。 我画个图,方便大家理解。这是内存,上面是一个个的存储单元,这一片呢就用来做追战。 cpu 把追 看成一个弹侠把数据当成子弹,并且规定这个位置叫站底,固定不动这个位置呢叫站底,是可以变化的。 在对战里没有数据的时候,站顶和站体是重合的,当需要往站里存数据的时候,就把站顶的位置往上挪一挪,腾出一个位置来,然后把数据放进去,这种动作叫做压战或者入战, 再来个数据再压战,以此类推。当需要从战里取出数据的时候,就先把数据复制到 cpu 中的计算器,然后把站顶的位置往下挪一挪,这种动作叫做弹站或者出站。 注意啊,出站后这个数据还在对战里,但是已经被当做垃圾了。有人说,我想绕过这个数据,直接取这个数据行不行?答案是不行。 前面说了,堆站里的数据先入的必须后出。上面讲了堆站操作的原理,下面聊聊堆站在编程中最常见的应用函数调用,想学好编程语言的这个部分绝对不能错过。程序在运行的时候,是以机器码的形式躺平在内存里面的, 每一句机器码都有自己的位置,称为地址。 cpu 执行程序的过程,就是把程序中的每一句机器码挨个拿过来,分析出这句机器码是干啥的,然后做相应的操作,该计算的计算,该取数据的取数据,该跳转的跳转,该死机的死机。 而所谓函数呢,就是一堆代码的打包。函数调用就是 cpu 在执行一个函数中的代码时,临时蹦跶到另一个函数,执行另一个函数里的代码,执行完了再蹦跶回来。用专业术语说叫做函数跳转和返回。 大家看,从这里跳转到另一个函数,待会返回后,接下来要执行哪句代码呢?哎,是这句。所以在跳转的时候, cpu 得把这句代码的地址找个地方记下来,不然待会返回时就不知道要执行哪一句了,毕竟 cpu 太忙了,也很健忘。 为了记录这个地址,就要用到对战。在跳转时, cpu 把这个地址压占,在返回时把这个地址弹占,地址就会被复制给了 cpu, cpu 呢,就会依据这个地址跑到这里继续执行代码。 有人可能要问了,记录位置这种破事,随便找一块内存区域都行,为啥非要用对战呢?这是因为实际的程序中,函数调用都是欠套的, a 调用 bb 调用, cc 调用 edf 等等等等等。这就需要把很多个返回地址按顺序保存,然后再按相反的顺序一个个 出来。这种先入后出的数据操作,当然是用追战最合适了。这时候有些调皮的同学可能要问了,假如函数无限调用下去啊,从来不返回会怎么样呢? 从上面的例子可以看出,每一次函数调用都会消耗对战的一些空间,而整个对战的大小是有限的,如果函数不停的调用而不返回,对战就会被塞满了,很快啊,这个时候再试图把数据压战,就会导致错误,叫做对战一除程序就崩溃了。 给大家演示一下,写一个函数 a, 然后在 a 的代码里调用,他自己在程序入口处直接调用 b, 函数运行看瞬间就崩溃了。多说一句,如果一个函数确实需要调用自己,那么必须设定一个限定条件,避免这种调用无限的继续下去,这就是所谓的地规调用了。

站和堆是程序中最重要的两种内存形式,站是连续内存,地址内存,创建选址效率都很高。函数调用站遵循着先入后出的原则,最后调用的函数最先释放站内存 函数。参数传递是复制传递,即将食餐复制一份给行餐,因而行餐的改变不会影响食餐。但是如果参数是指针,那么复制的就是地址的值,通过新号下钻,该地址就能修改啊地址内变量的值。 我们把包括结构体在内的基础类型的传参称为直传递,而指针的这传递称为引用传递。像 c, 勾浪等是有指针和地址概念的。而对于加瓦、拍森、 gs 等语言,那对象的变量名本身就是个指针,因而传递对象 就是引用传递。对于返回纸,付函数,在子函数入站之前会留出返回值的内存空间。返回纸与入餐一样是复制传递, 但是返回值如果是指针,则可能会导致富函数调用该地址内的变量的时候,那子函数因为已经出站,那导致访问错误。同样的情况也会出现在全局变量属性的负值的时候,这些都属于变量逃逸。很多语言像 go, rust、 加瓦等 会自动的进行陶艺分析,将陶艺的变量创建到所有函数共享的全局空间中。那这就是堆, 堆内存的释放呢?就会变得很复杂,像 c 语言需要手动释放,旺季或者多次释放都会带来问题。而像加瓦、勾浪、 gspassen 等等是有 jc 机制的,它能够定期的自动释放,但是 这也会导致性能下降,尤其是无法胜任硬件编程和系统级别的编程,但外部应用这样的容忍度较高的场景却有着广泛的应用。那 rast 呢?则是提出了自动实时回收的机制,但是需要有严格的编程规范,在学习初期,传统思维下很容易写出编辑失败的代码。


那首先呢,将我们拍摄的照片一直导入到我们的 nitrome, 那么建议呢,你拍摄月亮的照片最好称呼最好在二十三到三十张左右。 然后呢,我们到修改照片里面去对我们照片进行一个片量操作。首先呢,我们剪切一下照片,然后在技术面板里面进行一些简单的删除调节, 点击我家 a 键全选统一同步,统一同步同步到我们刚刚所了解的参数, 然后点击文件 并合适呢, 导出完成之后,你们来到了 skys 六整个软件里面进行啊堆在以及规划的操作。 那么这个软件相当于佛的笑,它的自动对齐功能是非常准确的。 ps, 自动对齐以及对战的完全不会出现过硬的情况,那么这个软件呢,是不会触电的,用点击刷按钮,红色按钮,导入我们刚刚保出的比亚还反复制的照片,本作家一拳拳以及打开, 打开完成之后呢,可以看到左上角这个线,点击他,他会自动帮我设置这种对系列。然后点击完成之后呢,他会出现第二条绿线 啊,那就是被弄被其涂成。 那么第二步完成之后呢,第三条线也会出现,我们点击他之后,他会出现呃黄色的点和绿色的线,那么这些是他的对齐点的对齐线。然后这一步他也会帮我们筛选掉不适合对战的照片。 第三步啊,直接点击左上角黄色按钮,它会自动报门约一下我们。呃拍摄的月亮照片 完成之后呢,可以看到他的表面是没有任何太大的变化。用点击 第三大步可以看到这里有一些呃比较复杂的参数模块啊,有需要点的直接点左下角的。呃,这个方式按钮,它的意思是导入绿色 啊,这个预设呢,是从国外的那个游玩下载的一个专业的视频网站下载的,那么包括这个软件呢,如果你没有用的可以私信我,可以给你直接点击打开 看到呢,刚打开完之后呢,把载物射之后的效果是非常的锐利的。 然后呢,我们点击 cipades 保存图片,这里呢啊,如果你要选择指数的话呢,就直接选择这个 g 格式保存就可以了,如果你要选择啊,后续还需要调色为及各种其他操控,你就选择 pmp 格式保存。这里呢,可以看一下啊,推荐前和推量后的 一个系列对比,我们放大非常强大的照片,可以看到它的细节是非常非常少的。对,而且不够锐利。我们看一下啊,非常厚之后的照片,它的细节呢啊和锐度都是非常好的。

大家好,上周呢给大家讲了一下对战的应用,在后台呢,有朋友针对对战的前后期提了一些问题, 那么这一周的内容呢,就是给大家做一个对战技术的进阶版,给大家讲一讲前期该如何拍摄对战素材在后期中该如何应用对战。对战实际上就是在同一时间段内拍摄的同一组画面, 通过对战的操作呢,可以保留固定位置上的像素,消除掉移动位置的像素啊。所以我们在前期拍摄对战素材的时候,是有以下几个点需要注意的。 第一点,构图要统一,我们在拍摄的时候啊,相机一定要上三脚架,并且把你的云台锁紧啊,确保我们拍摄的这个画面是不会发生位移抖动的,即使轻微的这些晃动呢,每一张 照片之间啊,他们的像素都会发生轻微的晃动,在对战完了之后,那么这张照片也是模糊的。第二点呢,就是要确保画面的焦点是固定的,你不能前几张对焦在前景,后面几张对焦在远景, 在对焦完成之后呢,可以将镜头上的对焦开关切换到 mf 来锁定对焦。第三点呢,也是大家比较有争议的一点啊,就是我们在前期拍摄对战素材的时候, 是用连拍就可以,还是要用间隔拍摄,我有的时候呢,会把延时摄影的素材拿出来对战。大家要知道延时摄影呢,是用间隔拍摄的,那么每一张照片与每张照片之间,他会间隔那么几秒钟,但是这些间隔呢,会让对战完的画面水流或者云层出现断层。 这是我拍摄的一段延时摄影,我选了其中的二十张素材,把它导入到 fate 少部当中,我们来做一个平均值的对战,来 模拟一下慢慢的效果。对战结束之后啊,大家可以看到云彩的效果还可以过度的比较细腻。 而水的波纹呢,因为水流的速度是比较快的,所以你如果有间隔时间的话,对战完的效果呢,他就不那么细腻,就会出现断层。所以大家的摄影包里最好带一根快门线,最简单的这种就行。拍摄对战的时候呢,我们将相机的快门释放模式改为连拍,然后锁住快门线,连拍十几张就可以对战了。 对战在我的后期流程中占到了很大的一个比例啊,我有一个拍摄习惯,在白天拍摄的时候,当我调整完构图,调整好曝光参数之后,我一般会用连拍拍摄十张, 然后在晚上弱光或者拍星空的时候,我会拍摄二十张,这样,然后方便回来对战,提升画质。先来看第一 这个案例啊,在拍摄日出日落大光笔的时候,我们首先要解决的是光笔问题,那么这个场景如果以暗部测光,那么就会造成天空过爆,如果以高光测光,那么会造成暗部欠爆。 但是如果大家看了我之前讲的准确曝光的教程,通过脂肪图就可以判断,这张照片记录到了足够多的亮布细节与暗布细节啊。脂肪图并没有变成这样,如果脂肪图变成了这样,就需要去做暴力曝光,但是脂肪图是 ok 的啊,所以我们也不需要去利用渐变滤镜来解决光笔。 天空与地面交接的地方,这里并不是平整的山体,有上下的高低起伏,我们使用界面滤镜呢,会造成这些山头的上半部分偏暗,亮度不均匀,用相机的宽度就可以解决。我们增加一些曝光,提亮阴影,加一些对比度,压一下高光, 增加一些自然保护度,那么对于这个场景,光线还原就完成了。现在我们再来看一下这个画面存在的问题啊,这张画面的这些山体呢,是背阴面,他是暗部, 他之前的记录到的信息是这么多啊,大家也看到,尽管我使用的是六十四的感光度,那么在远处他也会有一些噪点,同时在后期我又对他进行了个提亮啊,所以画面会有大量的噪点。那么大家知道降噪这个功能, 锐化与降噪他是一个双刃剑,那么锐化是增加细节,也就会增加噪点,而降噪呢,就是模糊细节,也会丢失细节。降噪与锐化,那么单张照片很难去掌握这个幅度,所以在这里呢,可以推荐大家来使用对战的方法,也就 就是说在前期我们调整好了构图,调整好了曝光,我们只需要用连拍的方式拍摄多张就可以了。我这里呢是四张照片,我把它同步一下,参数同步成一样的,我们退出开门肉,然后把它导入到 facebook 当中, 导致下来之后呢,我们全选所有的照片,打开雪人插件的面板,选择快速平均值。现在我们再来对比一下画质,这是未降噪之前,这是降噪之后,看一下远景, 这是未降噪之前,这是降噪之后。我们只需要简单的四张照片做一个对战,画质就得到了一个巨大的提升啊,非常方便 对战,尤其在夜晚这种极限光线环境下拍摄的时候,是非常好用的。我一般呢会在锁紧构图啊,调整好曝光参数之后,会选择连拍,拍摄二十张左右。那么这八张素材呢,是我拍摄的大连的一种荧光海藻,他在受力的情况下呢,会发出这种微弱的蓝光, 大家可以看到啊,每张照片上面都记录到了一点,他的数量是没有那么多的,但是我们在网络上看到的大量荧光海照片,他实际上都是利用了最大值的一个对战,最大值呢,就是可以保留每张图片里面最亮的像素信息啊,所以我们将这八张对战一下,首先呢,先给他做一个调节 好,调节好之后啊,给所有的图片做一个同步, 我们完成之后啊,我们将这个图片导入到他的照片当中, 导入完成之后啊,先来给大家做一个最大致的对战, 用半导选插件,用一个频快速啊最大值对战就可以了。对战完大家可以看到这一张画面里面荧光海的所有细节啊,都得到了一个保留, 但是最大值的对战模式呢,他会保留每个位置的像素最亮的这一点,所以他也会将我们每一张照片上的照点啊,都得做了一个保留, 所以这个画质看上去是比较差的。本身这个照片拍摄的时候就是用的一千六百的感光度,所以画质是比较差的,所以呢,我会在这里啊,先利用最大值,将荧光海藻的细节堆在一张照片上,再利用一个平均值的对战啊, 消除噪点,得到一张背景图层,然后再把最大值的这个荧光海细节,然后合成到这张背景图层上就可以了。 先给大家做一个操作啊,我们先用最大值的对战,对战完了之后我们先合并图层,这样的话我们就得到了一个荧光还比较好的这样一张图片啊,然后我们来做一个备份,保存好这张最大值对战的素材之后,我们通过历史工具回去 再选择所有的图层做一个平均值的对战,这样我们就可以得到一张无噪点的高画质背景图层,就是未对战之前,对战之后, 被对战之前啊,对战之后,这个时候我们将这个图层合并啊,就得到了一张背景图层,然后再打开文件,打开当 才保存在桌面上的这张最大值的荧光海藻图层。用移动工具将这个图片先解一下背景锁 好,把它移动过来, 让他们完全重叠,这样就可以了。这个时候呢,上面这一层啊是最大支对战, 下面这张呢是平均值对战,平均值对战呢,可以帮助我们消除画面的噪点,得到一个比较好的背景图层, 最大值对战呢,可以帮助我们画面保留荧光海更多的细节,然后我们给这两个图片做一个合成就可以了。给最大值这个图层添加一个黑色的门板,选择画笔工具,前景色选择白色,不透明度,流量选到百分之四十左 就可以了。在有荧光海藻的部位呢,做一个涂抹,这样一个简单的合成啊,将荧光海海藻的所有细节做了一个保留,同时呢我们又得到了一个高画质的图片, 所以这个呢,就是两种不同的对战模式在后期里的一个相结合,在夜晚拍摄一些极限光线环境下的照片,我都会去用到多种对战模式的一个合成, 那么对战还有一个缺点啊,就是单张照片的心点啊,那么他是固定的,而我们做了一个对战,无论是最大值还是平均值的对战,对战完之后,心点呢就发生了位移啊,因为地球的自转,所以我们拍摄完画面里的心点,他都是移动的, 所以我们在处理星空类的照片的时候,是需要进行两次平均值对战,第一次呢,先将地井对齐,做一个平均值的对战,得到高处 量无噪点的地点素材,然后再对天上的银河银星或者星点进行对齐,然后再做平均值的对战,得到一张无噪点高质量的银河素材,然后做天耕地的拼接 啊。其他的一些题材,像这种星轨或者萤火虫的题材,跟刚才给大家演示的荧光海藻的这个题材是一样的。 所以先要做最大值的对战,让所有的萤火虫细节啊都合成到一张照片上,然后再跟平均值对战的背景做一个合成。而心轨呢,也是用最大值对战,让我们的心情转起来,然后再跟平均值的地形素材做一个合成就可以了。 这两期的内容呢,给大家从对战的原理到前期拍摄,后期应用,给大家讲一下对战,分享一下我对于对战的经验,希望能给大家带来一定的帮助啊!最后感谢大家长期的关注与支持啊,我们下期再见,拜拜!

大家好,今天向前端朋友们分享一个学习 javascript 基础的 detailed 开源项目三三 gs tongsex, 它涵盖了 javascript 的吊用、堆占、原始类型、直类型和引用类型等三十三个重要基础概念。针对每个概念都附上了国内的一些优秀文章及视频内容。 这个项目是为了帮助开发者掌握 javascript 一些概念而创立的,他不是必备,但他一定是基础。在你未来学习 javascript 中,他一定可以作为你的学习指南。

会见到这个函数,为什么呢?奇怪了,我打断点,你看对战呀,这不是有吗?在右边, 右边。对,你这个函数是被谁掉用的?是被他上一个函数掉用的,看清楚了吗?两百在这里掉的,看到没有?那这个函数又是被谁掉的?是被慢掉的,你再找嘛? 对啊,就从这里掉进来,哎哎,我说呢,是不是吗?你再把他那个情况打出来看一下啊, 你注意他现在挂了,你别马上擦掉,别马上擦掉,停掉。你注意看这个吊用对战。吊用对战表示的是什么呢?表示的是你当前是在最上面这个函数被挂掉的,那这个函数是被他下面的一个函数调用的, 下面一个函数又是被下面一个函数调用的,你可以一路找下去,你可以一路找下去,找到从哪里调过来的,每一步掉进去是什么情况。这样你就知道我是在这里是死了, 但是这个死之前是因为谁打了谁一巴掌,谁又踩了哪个锄头,又赶走了猫,又碰到了谁,最后到了我这里来的,你就能随着溯源往回走 啊。这个就是这个对战的意义,你们查问题的时候,特别是死循环,然后,哎,那个不是老是跟我说当年为什么死循环的时候被我查出来了,就是你,你慢慢的养成这种习惯,你就能看到对战的异常,看到里面的这些东西 就能看得出来我们现在,我现在不强行说太多,但是你注意一下,有这么个东西在你的电脑上出问题的时候也看得到的,你可以通这个,通过这个地方就能找到。对, 奔三这个你很典型,就找出来,他刚刚不是就不知道为什么掉到这里来了吗?就通过这个东西一步一步就找出来了。刚才就没想到他找了个 f, 因为我上面定力了一个,我说我没掉用那个东西。哎呦 对,占用工具啊。我就还是这句话,别傻乎乎,一出错就代码一丢发到群里,谁来帮我解答一下,鬼知道怎么回事哈哈哈哈哈哈。

各位同学大家好,这里是由 it 影点 com 为大家提供的 nest g s 系列教程,我是竹节老师大地,那这样的话我们主要给大家讲解一下这个 nest g s 中使用模板引擎和配置静态资源。首先的话我们看一下 nest g s 中配置静态资源, 什么是这个静态资源呢?我们一个网站的 c s s g s 以及图片都叫做这个网站的静态资源啊。 比如说接下来的话,我们在我们的程序里边放了一张图片,那我们想的是在浏览器里边可以访问这张图片啊,那这时候的话,我们就需要把这张图片放在静态资源目录里边, 然后接下来的话配置静态资源目录啊, ok, 就比如说我们现在想的是在浏览器里边输入 locals 的三千,然后斜盖啊,幺点勾 pg 的时候啊,我们可以访问啊这个幺点 qpg 这张图片,那这时候的话我们就需要配置这个静态资源啊,怎么配置呢啊?我们首先打开这个官方文档给大家看一下啊,在官方文档的这个 mvc 里边,他给我们提供了一个配置静态资源以及配置模板引擎的例子啊, 那我们要配置这个静态资源的话,通过这个 app 点儿柚子 static assets 啊,就可以配置我们静态资源目录,你只需要把我们的静态资源放在这个目录里边,那接下来的话我们就可以在浏览器里边访问啊, 是要注意的是我们这个静态资源啊,以及这个模板引擎,他是基于这个 http 平台的,所以我们首先需要引入一个 http 平台啊,那这里边用的最多的就是这个 express 啊, express, 所以这里 这边的话,我们首先需要引入 next gs 里边默认的这个 platform express 平台。引入以后,然后接下来的话,在创建这个 app 实力的时候啊,我们需要传入我们这个平台,那这里边的这个 create 方法的话啊,它是一个范型,所以我们在这里边传入我们这个平台。 传入以后,然后接下来的话,我们就可以通过 app 点儿柚子 static assets 啊, assets 来配置我们这个静态资源啊,包括也可以配置我们这个模板引擎。那接下来的话我们给大家演示一下,首先配置这个静态资源啊, 在课前的话,我们又新建了一个项目啊,然后接下来的话我们运行一下,就是这样的效果啊啊,这就是我们课前新建的项目,这里边的话只有他默认的文件啊,然后接下来的话,我们在这个项目里边给大家配置这个静态资源,那接下来的话,我们想的是 是把我们的图片啊放在根目录里边的这个 public 啊文件件里边啊, public 文件夹里边。 ok, 那这时候的话,我们首先需要在这个根目录里边新建一个 public 啊, 当然你这个静态资源不要放在 src 里边啊,放在 src 里边是有问题的啊,所以我们在我们的根目录里边新建一个 public 文件夹,这个文件夹里边放的就是静态资源, 然后接下来的话,我们给这个文件夹里边复制一张图片啊,再接下来的话,我们想的是啊,在浏览器里边输入 local house 的三千,然后这里边输入呃,一点拼接能访问我们这里边这张图片啊,那这时候的话,我们就需要配置这个静态资源目录, 那配置这个静态资源之前的话,我们需要引入一个 h t t p 平台啊,那这里边的话,我们主要给大家讲解这个 x press 啊,如果你会其他平台的话,那这里边同样引入对应的这个 http 平台啊。引入以后,然后接下来在这个 app 的这个 treat 方法里边 传入我们当前这个平台啊,这个 create 方法的话,它是一个泛行方法,你看一下,我们点开啊,点开以后你会发现啊,它是一个泛行方法啊,那在这里边的话,我们需要把我们这个平台给它传入。 传入以后,然后接下来的话,在这个 a p p 里边就有一个配置静态资源的方法啊,叫什么呢?啊?叫这个 use static assets 啊,那接下来的话,我们就可以配置了,叫 use 啊, static 啊 assets, 然后在这里边配置,那这时候的话,我们在这里边写 public, 那这样的话啊,就配置成功了。我们这个静态资源目录啊,这叫配置静态资源啊,目录。 ok, 那 这个配置好以后,然后接下来的话,我们就直接可以在哪呢?在浏览器里边访问这个 public 目录里边的静态资源了,那这时候我们给大家看一下啊,那这时候我们刷新一下啊,刷新一下。那这里边因为没有重新运行吗?啊?我们重新运行一下啊,重新运行一下 啊。预习以后,那这时候我们在这刷新一下,看一下啊,我们这个 public 目录里边的静态资源是不是就可以访问了啊?就这个意思啊,包括你在这里边新建其他文件,比如说这里边还有 c s s 文件啊,叫啊 b a s e b a s e, 点儿 c s s, 那这时候我们也可以访问他啊,也可以访问他啊,比如说这里边写点东西 div, 然后来个,哎, color 啊, c o 啊, c o l o r color, 来个 red, ok, 那这时候我们同样的 能访问这个贝斯点 cs 四,那这时候直接在这里边输入贝斯点 css, ok, 就可以获取这个静态资源啊,这就是如何配置这个静态资源目录啊,这个的话在我们实际项目中啊,是必须得配置的啊。 ok, 那配置我们这个静态资源的话啊,还有另一种方法,也就是啊,配置一个虚拟目录啊,比如说现在的话,我们是直接这样访问的, 接下来的话,我们想的是,哎,能不能这样访问啊?访问这个 steadic 下边的这个啊,贝斯点 c s s 的时候,加载 public 目录里边的这个贝斯,点 c s s, 也就是配置这个虚拟目录啊,配置虚拟目录的话,一样的啊,我们在第二个参数里边啊,传入一个 perfect, 然后这里边指定虚拟目录的这个名称,那这样就可以配置这个虚拟目录了啊,那接下来的话,我们就直接把这个代码复制 过来给大家演示一下啊,直接复制过来啊,那这个代码的话,这里边需要引入这个呃, notes g s 里边的这个 pass 模块啊,当然我们也可以直接这样写,你看啊,我们首先按照我们自己的方法来写一下,一会我们再看一下上边这个代码啊, 在第二个参数里边,哎,传入一个 perfect, 然后在这里边的话,指定对应的这个目录啊,比如说叫 static 目录啊, static 目录,那这样的话我们这个虚拟目录就配置成功了啊。呃, 把上面这个先注视掉啊,这个的话啊,这个的话只需要配置一个就行了,这里边表示配置虚拟目录。 ok, 那这时候我们再运行一下给大家看一下啊 啊,运行一下,然后这里边应该访问谁呢?是不访问 static s t a t i c 啊? s t a t i c 下边儿的贝斯点四 s 四,你发现同样可以访 访问啊,访问 static 下边的一点拼接是不是也可以访问啊?但是你不加这个虚拟目录的时候,这时候就访问不了了啊,这就是配置虚拟目录啊,当然如果你看到别人这样写的时候,你得知道什么意思啊,就是 这个代码其实和我们刚才写的这个代码是一样的啊,那接下来我们复制过来给大家对比一下看一下啊, 就是如果你接到这个店买的话,你也得知道什么意思啊,我们格式化一下这个文档,然后在这里边的话,你看同样的他这里边,呃,是怎么写呢?是这样写的啊,稍等,我们把这个把这个拿下来啊,应该是这样的,在格式化一下 它这里边的话,用了一个装引啊,来装引一下我们这个,呃,目录啊,也就是根目录啊,以及这个 public 目录,那这个代码是什么意思呢?这个代码其实它这里边用到了一个 pass 模块啊,这里边我们需 需要引入啊, i m p o r t 啊,引入这个 pass 模块啊, pass 模块里边这个装印方法,下大雨啊,这里有一个 form 啊,叫 p a t h。 稍等一下 啊,这个 plus 模块的话,是我们 not not g s 里边自带的模块啊,那这时候的话也是可以的啊,也就是你接到这个代码其实和上边这个代码是一样的啊,那接下来我们把上边这个代码注视掉,那这时候同样的啊,这里边是不是也应该能访问这个 steak 下边的啊?一点拼接一点拼接啊,也是可以访问的,这就是配置虚拟目录啊,配置虚拟目录啊,这两个是一个意思啊。 ok, 那接下来的话我们再给大家看一下啊,配置什么呢?配置我们这个模板引擎啊,配置模板引擎,什么叫配置模板引擎呢?比如 比如说啊,我们前边给大家讲的路由,对吧啊,讲的路由他是直接返回了,那接下来的话,我们想的是当你访问这个路由的时候啊,我们能把当前的数据渲染到一个 ht 苗页面上,或者能返回一个 ht 苗页面, 那这时候的话啊,就叫做什么呢?就叫做这个,哎,模板引擎渲染啊,那这时候的话,我们需要配置我们项目的一个模板引擎啊, 那最常用的模板引擎的话,就是这个 e g s 啊,当然还有一些其他模板引擎,比如说啊,这个官方文档上给我们提供的是什么呢?提供的是这个 h b s 这个模板引擎啊,那接下来的话,我们给大家演示的是 e g s, 如果你会其他模板引擎的话,同样的啊,操作步骤是一样的, 如何配置呢?首先第一步啊,需要安装我们对应的这个模板引擎,安装完成以后,然后接下来的话把 这两句话配置一下啊,这个表示配置我们这个模板引擎重放的一个目录,以及啊配置我们当前项目使用什么模板引擎, 然后配置完成以后啊,我们就可以在路由里边来使用了啊,通过 render 来渲染这个页面啊, render 装饰器来渲染页面, 然后这里边返回的信息啊,表示 render 的时候传入的一些信息,然后接下来在我们的 ht 苗里边就可以啊,显示出对应的这个信息。 ok, 那接下来我们给大家演示一下啊,那接下来的话,我们首先第一步啊,第一步需要安装对应的这个模板引擎 啊,比如说我们这里边要用 e g s 的话,那你就需要安装 e g s 啊, c n p m i 然后这里边儿来个杠 g, 然后这里边儿个 e g s 啊, e g s。 杠杠 c 五啊,把杠杠 c 五给它加上去啊,不叫杠 g 啊,就是 n p m i 然后 e g s。 盖盖 c 五啊,啊盖即表示全局啊,应该这样去安装这个 e g s。 看一下,我们这里边也给大家写了啊,当然你也可以用样来安装啊,呀爱的 e g s 也是可以的啊, e g s。 安装完成以后,那接下来我们运行一下这个项目啊,再运行一下 运行的同时,那这时候的话,我们需要配置这个 e g s。 那这时候的话再找到我们这个魅点 t s 啊,然后接下来的话啊,通过 a p p 点一个啊,叫 set 啊, set base base 啊, view views d i r 来配置我们这个叫 叫什么呢?叫模板的一个目录啊,那这里边的话,我们配置成一个 views v i e w s views 啊,然后接下来的话再配置我们这个,呃使用的模板引擎啊,啊,叫 set v i e v o 啊 v o n 者啊, 然后这里边的话啊,输入我们的模板引擎,我们的模板引擎是不是叫 e g s 啊?注意啊,这里边啊,首先必须得安装啊,模板引擎啊 啊,给大家写一下啊,也就是注意,首先必须得安装模板引擎,通过这个来安装啊,安装完成以后,这个模板引擎的话,你是不需要引入的啊,我们只需要在这里边配置一下就可以了。 ok, 那配置完成以后,那接下来的话,我们需要找到我们这个项目的根目录啊,在这里边的话,然后新建一个文件夹来放我们对应的这个模板啊啊,那这里边的话叫 views vios。 来放我们对应的这个模板啊, 然后在这个 views 里边的话啊,我们啊,比如说新建一个文件夹啊,新建一个文件夹啊,比如说叫 default, 当然我们这个项目的话可能有前台,可能有后台啊,所以我们把它给分开啊, default 的话 表示呃前台,然后接下来的话这里边还有个 enemy, enemy 的话表示后台啊,就这个意思,那这个模板文件结定好以后,然后接下来的话我们在这里边写我们的这个,呃模板啊,也就是 静态的 h t m l, 那这里边的话啊啊它的后缀名是 e g s, 我们在这个 default 里边新建一个 index 点 e g s, 然后在这里边的话配置我们这个 h t m l 代码啊,然后这里边的话我们写一句话啊,我是模板引擎啊,我是模板引擎, ok, 然后接下来的话,我们想的是当访问这个路由的时候啊,能加载这个模板,那这时候的话我们就这样写了啊,我们在这里边写一个 render 的装饰器, r e n 点 render 的装饰器啊,啊,然后在这里边的话,指定我们对应的这个模板,那我们对应的模板在哪呢?是不是在 就 fort 的 index 点 e g s 里边啊?所以这时候我们就得这样写了啊,如果你这个模板直接在这个 view 啊 views 里边的话,你就直接写一个 index 点 e g s 就行了 啊,比如说这个 index 点 e e g s 啊,给大家看一下,比如说它啊,默认就在这个文件夹里边,那这时候的话你直接写就行了。但是如果它在这个啊 default 里边,那这时候的话我们就得这样写了,我们写个 default 啊, d f a u l t default 斜杠啊, index 啊 index 点 e g s 啊,那这时候的话表示渲染这里边这个膜脉啊,当然这里边这个点 e g s 啊,我们不需要写啊,直接写个 fort 斜杠下边的 index 表示就需要这个模板啊, ok, 然后在这里边的话,我们可以返回一些数据啊,比如说这里边来一个,呃,来个什么呢?来个内蒙,内蒙等于一个张三啊,内蒙等于张三啊,那这时候我们就 这样写啊,这里边报错的话,是因为啊,是因为我们这个方法的话啊,他要求返回的类型必须是 three 类型啊,那这里边我们把这个返回的类型给他去掉,那这样的话就 ok 了啊, 那这样的话啊,当我们访问这个路由的时候,他就会加载这个 index 点 e g s 这个模板,并且把我们这个数据传入到这个模板里边啊,那这时候的话,我们运行一下,给大家看一下到底对不对啊? 啊?我们走一下,然后这里边打印出我是什么呢?我是模板引擎啊,表示已经能加载什么呢?是不是已经能加载这个页面了?然后这里边的话,我们把它改成个 h h 一啊,改成个 h 一, 然后接下来的话我们写个 br 然后在这里边的话啊,我们打印出这个人的信息,也就是啊把这个那么等于张三,比如说这里边还有 at, 等于个二十,然后渲染到我们这个页面上啊,那这时候的话, 你就在这里边绑定数据啊,就在这里边绑定数据啊,这个 egs 的话,通过接括号、被封号、等号来输出我们后台传过来的数据啊,那这里边有内蒙啊,有内蒙,还有这个叫 age 啊,有内蒙和 age, ok, 那这样就搞定了,然后这里边你也可以写个姓名,对吧?姓名,然后来一个年龄 啊,这就是使用模板引擎啊,然后接下来我们再运行一下,看一下我是模板引擎姓名, 呃,这个张三,然后啊年龄二十, ok, 你看一下语言代码,是不是也可以看到我们这个数据啊?啊?这就是这个如何去渲染我们这个数据啊? 那这样渲染的好处是什么呢?渲染的好处就是啊,这个搜索已清,他可以搜索到你这个页面啊,如果你这里边直接是个接口,也就是啊,这里边直接返回的是 是一个摘色数据,那接下来的话,你通过阿贾克斯请求,然后渲染数据的话,那这时候他这个搜索引擎是抓取不到你这个数据的啊,这里边要注意一下啊,我们这个 pc 端用的最多的就是这个模板引擎渲染啊,包括在后台管理系统里边啊,用的也是非常非常多的。 行,那这个的话我们就讲到这啊,然后接下来的话,我们再给大家啊看一个例子,也就是啊,模板引擎,结合我们这个 post 提交的例子啊,那接下来的话,我们再新建一个控制器,给大家演示一下啊 啊,这里边通过 next, 然后这里边来个呃啊来 j, 然后来盖盖 help 啊,我们给大家创建控制器,那就是 next g control 啊, next j control, 如果你忘记命令的话,你就直接敲入 next j 盖盖 help 啊,然后这里边我们敲 next n e s t j controller 啊,然后这里边那个叫啊 user 啊,创建个 user 的控制器,给大家演示一下这个 past 提交数据啊 user 控制器, ok, 那这样就新建好了啊, user 的话在哪呢?是不是在我们 srtc 里边有个 user, 然后在这里边的话配置这个路由啊,然后首先配置这个 get 啊, get 默认啊,默认情况,我们让他加载这个 index 方法啊, index 方法,然后在这里边的话 reto 啊, i t o on reto 一个叫 user, 那这时候的话,我们首先看一下能不能访问当前这个呃,这个 user 的这个路由啊,那这时候我们预警一下, 预习以后,我们看首先能不能访问,如果能访问的话,然后接下来的话,我们再给大家讲解这个模板引擎的渲染啊, ok, 这时候的话,我们打开页面,然后在这里边输入 user 可以访问啊, 可以访问以后,然后接下来的话,我们想的是啊,加载这个路由的时候,然后啊进行一个模板的渲染啊,也就是能加载到我们对应的这个模板。那这时候的话,我们在这个 defort 里边再新建一个啊,新建一个文件啊,叫 user 点 e g s 啊, user 点 e g s, ok 啊,然后在这个悠着点 e g s 里边的话,我们写一个表单啊,给大家演示一下这个数据的提交啊,然后这里边写个 form 表单 啊,我们就直接写一个叫 f o r m 啊 form, 然后这里边是一个 post 啊, post 提交的地址是什么呢?提交地址就是 user 下边的这个,呃, doadd 啊,啊 do a d d 啊,然后以 post 方式给它提交啊,然后这里边的话我们写对应的这个表带,叫 input i n p u t 啊, input, 然后这里边应该 是一个什么呢? input 应该是个 test 啊,啊, input test 内幕的话,我们需要指定一下啊,比如说这里边就叫 user name 啊, id 的话你可以不写啊, id 的话可以不写,然后这里边的话啊配置一下它,呃,输入内容啊,叫请输入啊,用户名, ok, 这个表达就写好了,写好以后我们再复制一个啊,然后这里边加两个 b r 啊,这里边这个 c s s 我们就不写了啊,当然回头 c s s 的话,你应该放在哪? c s s 是不放在这个啊, public 目录里边啊,啊,这里边我们也可以引入这个 c s s 啊,引入的话,这里边通过啊 style style 来引入它 啊, s t, y l e style 啊,不叫 style 啊,叫 link。 什么 style 啊? link 啊, link link 来引入我们对应的这个 c s s 那这个 目录应该怎么写啊?是不就是这个,呃,我们刚才写的 static 啊, static 下边的这个 base 啊, b a 啊, base 点 c s 三四 啊,叫 static 下边的贝斯点 c s s 啊,当然这里边你也可以加载图片,加载图片的话就是通过 email 是来加载,那这里边同样的它是在 static 里边啊,我们建议大家在前边加个斜杠啊,这表示它以根目录为基准啊,那这里边的话是一个啊,一点儿平机一点儿平机 啊,这就是这个图片啊,设备个图片,这里边给大家演示一下啊,然后这里边的话写个 br 这个电板应该能看懂啊,但是有点乱。没关系啊,我们这里边主要想给大家演示在我们这个呃 静态模板里边啊,如何加载它的静态资源啊,以及如何执行一个 post 提交数据啊,那这里边我们改成一个 age 啊, age 的话,这里边 叫啊年龄啊,就随便写一下啊啊,然后接下来的话我们提交啊, input type 等于一个 type 等于一个 but 那叫 submit 啊, submit ok, 然后这里边的话叫提交, 那这样的话,当我们点提交的时候啊,他就会给我们这个优的下边的多 a, d, d 来进行 post 数据啊,那这时候的话,我们再找到我们这个 you 的模块啊 you 子,然后在这里边的话啊,接听一下这个多 a, d, d。 那就是这里边应该改成什么?是不改成 past 啊, past, 然后这里边来个多 a, d d 啊,当都 add 的时候,我们是不是要接收他传过来的数据啊?那这里边的话,我们又可以用上节课给大家学的这个什么呢?学的这个啊, body 对吧? body 装饰器啊,来获取提交的数据啊,来获取提交的数据,这里边我们 瑞托一个叫啊增加成功,增加成功,增加成功以后,我们让他再跳转到这个首页啊,啊?跳转到首页,那这时候的话我们又可以呃,通过这个 redirect 啊, redirect 的话在哪呢?在我们这个 啊,叫 r e s 里边啊,那就是 respons r es p o n s e resposs, 这个装饰器也给它引入啊,这个的话我们在上节课没有给大家讲,对吧? ok 啊,这个和 express 里边基本是一样的啊,也就是在这里边的话,我们首先获取表单提交过来的数据,这个没问题吧?在 boot 里边啊,我们看能不能打印。 如果呢?获取以后啊,那接下来的话,我们要跳转到这个优字页面,那这时候的话通过 i e s 点一个 redirect, i e d i r e c t 来进行个跳转啊,再跳转到对应的这个 user, ok, 那这时候的话,我们 给大家看一下这个代码到底对不对啊?那这时候的话,我们啊重新运行一下,看这里边对不对啊?这里边是没问题的,然后这里边稍等访问啊, local house 三七下边的 u 字啊, locals 三七下边 user 啊,访问的时候他这里边返回 user 没问题啊,那这时候的话,我们需要渲染,渲染的话,这里边调用这个 render 啊, render 渲染到哪呢?是不是渲染到我们这个 default 啊? default d f a u l t defort 下边的 user 啊, user 点 e g s, 那就是选到 defort 下边的 user, 对吧?然后接下来的话,呃,这里边的话啊,这里边你可以不传任何东西,那这时候啊,我们看一下 啊,或者你就返回一个空也行啊,看一下啊,这里边是不是加载了这张图片,并且在这里边也加载了对应的这个 css 啊?啊?网络里边你看一下是不是有加载这个 cs 啊?没问题啊,没问题以后,然后接下来的话,我们要执行这个提交啊,也就在这提交的时候,哎,是不是在这里边应该能打印出我们这个数据啊?那这时候我们看一下啊,这里边来个啊 aaa, 然后啊幺二,然后点提交, 提交以后看一下是不是打印出来了,然后最后又跳转到了我们这个 user, 对不对?就这个意思啊,这表示路由跳转啊,路由啊跳转 啊,这个的话就是我们上节课给大家讲的 post 提交来获取 post 提交的数据啊,那这时候你看一下,我们在这访问的时候,他其实是不已经能获取到我们 post 提交的数据了,获取到以后他又跳转到这个 user 了,对吧?就这个意思 啊。行,那这一讲我们就给大家讲到这啊,这一讲的话,首先给大家讲了什么呢?讲了这个配置,静态资源啊,静态资源的话就是我 我们这个 c s s 啊, g s 以及图片啊配置的话,首先我们需要引入一个啊平台啊,引入以后我们需要在这个 create 方法里边传入这个平台, 这个 create 方法的话,它是一个范型,这里边必须得传入,传入以后通过 a p p 点儿 use static assets assets 来配置这个静态资源目录啊, 然后接下来又给大家讲了配置什么呢?配置模板引擎,那配置模板引擎和配置这个静态资源有点相似啊,但是模板引擎的话,我们首先需要安装这个模板引擎, 完成以后不需要引入啊,然后接下来的话,通过这两句话就可以配置模板引擎。配置完成以后通过 render 啊,通过这个 render 来渲染我们这个模板,渲染的时候,我们也可以给他传入数据啊,传入数据的话,就是在这个方法里边返回一个啊,返回一个 jason 的数据啊, r e t u 瑞拓一个 jason 的对象啊啊,比如说 name ame name 等于个张三,对吧?啊?返回这样一个这样一个数据,那这样的话啊,他就啊可以把我们这个 jason 对象啊传到我们这个模板里边,然后接下来我们就可以在模板里边输出后台返回的数据啊, 然后这个操作的话啊,回头我们需要连接数据库,在数据库里边查询,这个的话我们在后边再给大家讲啊 啊,这就是啊,配置我们这个模板引擎啊,这个模板引擎以及静态资源都是在哪呢?都是在我们这个魅点 ts 里边啊,也就是入口里边进行配置的, 回头把这个代码拿到啊,很简单啊,第一步,第二步,然后第三步啊,然后接下来第四步,第五步,对吧?啊?这样的话静态资源和模板引擎都配置好了啊,然后最后又给大家演示了什么呢?啊?演示了 post 提交 教数据啊, pos 提交数据,这个的话和我们上节课讲的基本是一样的啊,我们这里边又给大家新建了一个啊, user controller 啊,在这里边的话有个多 a、 d、 d, 然后这里边的话可以接收这个表单,表单在哪呢?表单是不是就是 user 点 e, g, s 啊?然后这里边提交的时候啊,要注意这个路径啊, 还要访问 u 的下边多 a, d, d 啊,然后这时候的话一提交他就会给 you 的下边的多 a、 d, d 来提交数据,以 post 的方式啊发送数据,那这时候的话我们通过玻璃装饰器可以获取 post 提交的数据, 然后接下来的话提交成功,你又要回到我们这个 user 啊,那这时候的话我们通过 is 点 redirect 来进行路由跳转啊,也就是在 javascript 里边进行路由跳转,这就是我们这节课给大家讲的内容啊。行,那这一讲我们就讲到这啊。