00:00
下面我们来说这个购物车的这个功能,那这样啊,我们这个重新运行一下。啊,这个,哎。邮件。终端打开。第二一个。Man。一个exe。好啊,诶运行一下,那运行中呢,我们来这个启动一下啊。说一下我们接下来要完成的这个内容。Local。省电。诶,接下来我们要完成的内容呢,就是点这个,哎,加入购物车,诶这个往我们这个用户了,诶现在问一个问题啊,这个我们添加图书到购物车的时候呢,需不需要登录啊。需要是不需要,需不需要啊,对这块呢,也也是在你自己的设计,这个你感觉需要还是不需要啊。
01:07
对,其实这个啊,你要按正常的来说,其实这个没有必要,为什么呢?因为这个购物车你加到购物车里边的东西不一定就是你的。对吧,我也不知道,我也不用管是谁的,但是最终结账的时候我就知道是谁的了。因为你家购物车里边不一定。都是你要买的对吧,对吧,哎,所以这块就跟你去超市一样,你去超市选买东西,选了一天购物车都满了,结果呢,我下完班之后呢,购物车推到收银台之后结,结完账的就是我的。哎,那除非你这个,哎,我们在里边打了一下是吧?哎,这个例外啊,因为你在那个里边,购物车里边的东西并不是你的,结完账之后才是你的啊,所以这块啊,我们可以这个设计为,比如这个诶登录之后,诶登录之后呢,再添加购物车也可以,或者是不登录再添加,诶都可以啊都可以。啊这一块,因为这个,呃,其实不同的这个平台啊,可能的这个设计呢也不一样,那现在呢,你像这个正常的,你像这个淘宝或者京东啊,你要登登完淘宝之后添加到购物车里边,你你发现这个。
02:15
隔好长时间再再登上你的账号,如果购物车里边还有是吧?对吧,还有那如果要是这个你如果这样啊,你这个呃不登录,然后添加购物车的话,那这个信息呢,没有在你的账户里边,这时候呢,你在登录之后呢,肯定也查不出来啊查不出来,所以呢,我们这块啊我们这块呢,诶实现时呢,哎我们也实现下,诶登录之后呢,诶让他添加购物车,或者你这个不登录,诶添加购物车都行啊都可以,那我们在这设计的是登录啊需要登录,哎需要登录,所以呢,我们这块呢,点加入购物车呢,把这个呃数据呢添加到购物车里边,诶加到购物车里边这块呢,会显示什么,您刚刚将谁加到了购物车,诶您的购物车里边有几件商品,你现在购物车里边有几件了,或说这块啊,这个首先这个两个呢,如果你比如后期呢,嫌麻烦的话,你可以直接就显示一下,你刚刚加谁加到了购物车啊这个呢,呃。
03:07
购物车里边有几个上面呢,也需要查询一下,我们这个点购物车的时候,在这里边看也是可以啊,也是可以,这是第一个啊,点它添加,也就是说把这些东西呢,我这个添加到购物车里面来放。放到这个,呃,还有啊,另外这个购物车的个实现方式,诶购物车的实现方式呢,呃,第一诶这个我可以干什么呢?呃,放到这个session里边,放到cookie里边,第第一种实现的方式,第二种呢,我放三审里边,第三种就是保存到数据库里边,有这么多这个实现方式啊,那我们在这呢,因为我们现在的session审呢,也是放到这个数据库里边的,所以呢,我们这一块设计的这个购物车啊,跟你的用户相当于绑定在一起了。哎,放到这个数据库里边了,那当然你的用户登进去之后,比如din登进去之后,点开购物车,那是DMI的一个购物车,能显示出来你这购物车里边的内容,那DMI2登你记住呢啊,DMI2这个购物车里边能显示你DMI2的个这个里边的内容,就是这样设计的啊,那如果你要是这个,呃,你要是涉及的这个购物车是没有登录的,就可以得添加的话,那这块呢,那这个诶谁登录,可能这个购物车里边都一样,哎都一样,就是这个意思啊,就是这个意思,诶因为呢,这这个如果你要不登录。
04:18
不登录这个添加到购物车,那任何一个用户登进去之后呢,看到的购物车呢,都是一样的,都是一样的,就相当于共享一个购物车了啊,那结账的时候这块呢,你就必须得这个登录了,所以这块这个设计啊,哎这个可以哎有这两个两种方式啊,你可以设计必须得登录,或者设计不登录都是可以的。好,那我们先点一下这个购物车啊,看里边都有什么,比如说我要点一个买一个它解忧杂货店,或者买个编程,诶买个它买进去之后呢,点开这个购物车,诶我们现在这些东西我们后期再处理啊,先不管它,我们先来看这个这里边儿这个商品。首先呢,购物车将来我们点开之后呢,显示的里边的内容,我们看都包括什么啊,这个总数量,也就是你购物车里边到底买了多少本图书啊,诶购物车里边总数量,还有一个总金额,那你添加到购物车里边这些图书呢,一共有多少钱,一共值多少钱,这就是将来你要去结账要付的钱,诶要付的这个总金额了啊总金额那在这诶来看一下啊,通过这个页面我们发现呢,这里边这些内容像时间简史啊,还有这些单价啊,这是不是以及我们现有的这个book。
05:21
可以显示对吧。诶可以显示出来吗?因为我们现在有个book结构体嘛,有个book,所以呢,这个呃,这些书名我book里边有,那这个单价我book里边也有,但是其他的相面数量金额呢,那这个就没有了,还有一个购物车一共有多少件,多少这个总金额,这些东西呢,哎,我这个通过book壳呢,哎就这个,哎没办法给显示了,所以呢,我们得把这些信息呢,放到每一个地方,哎就那你再创建一个结构,然后放到那个结构里边,将来呢,哎,我这个呃一点就返回这样的一个结构呢,然后从里边拿这个内容来拿个内容,所以啊,我们在这设计的时候呢,我们需要来创建两个,诶创建两个结构。
06:01
一个叫cut。就是我们那个购物车一个结构,然后呢,我们把cut里边这些内容注意了啊,我们把cut里边这个又把它给细分了来,我们重新。哎,我把这个整体。我整一个结构呢,叫cut。他。哎,就是购物车的意思,然后购物车里边呢,包含总数量,就是你购物车里边一个图书的总数量,还有包含一个总金额啊,哎,一个总数量,这个total count,哎叫TC了啊,还有个总金额,比如叫什么total amount。Ta总金额,那另外呢,这里边这一个一个的,这一个一个的,哎我们有给他整一个结构叫什么呢?叫购物项,比如购物车里边一个一个的购物项,就跟你平时买东西一样,你购物车里边什么放了放了水果放在这个什么,呃呃,蔬菜放在什么奶这东西对不对吧?那不同的这个购物项,所以啊,我们在一块分的时,我是这样的,哎这样的一个设计的,诶有一个结构叫cut里边呢,有这一个,呃总数量跟总金额,另外呢,这里边是不是一个一个的购物项。
07:11
对吧,一个一个的勾物像,然后呢,我们怎么来放这些购物像呢,我们整一个哎,切片。对,整一个切片,那这个里边这个构物项的类型就是我们的第二个结构了,叫cut item。哎叫cut item,哎就是另外一个了,哎就是哎购物项,哎这个结构T购物项这个结构体好,这是这个购物车的,哎它的一个组成部分啊,那这个购物项里边,哎,比如那我们这个cut。哎,Cut it,那它都分哪些呢?哎,在这里边我们看到了这每一个购物项里边有书名,有价格,这个书名和价格是不是通过book就能拿到。所以呢,我这里边是不是可以放一个book。哎,可以吧,因为我们有这个book结构了,所以啊,我这里边放一个book,那好,那这个book有了之后,数名有了,价格也有了,是不是还差一个数量,所以呢,我们再有一个A叫叫count c count有一个数量,另外呢,诶还有我这一个金额。
08:09
Amount,但是注意这个amount是不是我的数量乘以这个图书的这个单价,这个是通过计算得到的,所以呢,我们就可以给这个结构里边呢,写一个方法来获取这个往呢获取金额的一个方法,就这样啊,另外这是我们通过这个购物车,通过这一个页面,我们分析之后呢,想创建这两个结构,但是呢,诶注意了,我们刚刚说了,额,Din登了有adin的购物车,ADIN2登了有ADIN2的购物车,所以呢,在这个cut这个结构里边,你是不是得有一个user的ID。对吧,诶你得关联一下,将来呢,我们也要创建这个数据表,只是表里边啊,不保存这些什么卡的item这些,只保存总数量跟总金额这这几个数字,哎,那其他的我们这个在前台这块按。
09:00
数据库里边不体现,那我们在这儿有一个user的ID,也就是它有一个外键,需要关联那个user的表,我就知道啊,这个购物车这一条啊,这个购车信息呢,是某一个用户下的某一个用户的购物车就是这样的啊,所以呢,这块有个外键,当然了,这里边每个购物车它有个ID,这个就不说了啊,我们就说了这里边核心的一个内容,那同样这个购物项它是不是也应该有个外键,你这个购物项到底是属于哪一个购物车的,对吧?所以这块还得有一个cut的一个ID,购物车的一个ID,所以这是这块啊,哎,我们这这样设计的,设计的好,那现在啊,我们就来把这两个结构给写出来。来,在摸这块。右键我们来用一个文件,就叫一个cut,先写cut item。卡艾em这个勾勾像。好,来还。
10:02
Tests。叫一个cut a。像。好,来写个注释。Cut item。什么呢,结构,哎,这个购物项。好,然后呢,在这里边我们开始写字段,第一个,那这个购物项,我们将来保存时就让它这个它有一个每一条一条的购物项有个ID,所以呢,这个ID呢,就让它自尊就行了,所以呢,我们整一个什么呢?ID。有一个写写全叫一个em ID吧,写全一点的啊。好哎,这是卡ID这个int类型,我们就都都整成int。那之前的都是印的什么呀,六十四六十四是吧,都是64是吧。
11:01
这好像都是特。那就这个配我们写的是,诶这个是后来我们写的时候转的时候,这个不是64还得进行强转对吧。这些我现在能不能改啊。我改完是不是其他地方会报错啊。别改了啊,这这这一改,其他的地方都得改好啊,哎就这样了,就这样了,好,那这个不动它了啊,不动它了,我们来继续写这个,哎,Int这个,哎就从这开始吧啊INT64了,INT64了,好哎再往下,这是一个购物项的一个ID,购物项的一个ID,再往下呢,根据我们刚刚这个分析,我每一个购物这个项里边呢,需要有book,所以呢,来一个book,哎这个类型,哎整一个什么呢?哎book,哎,Book好,那有了这个book之后,你想显示的这些,你像这些书名啊,价格啊,我就可以通过这个book来来得到了,哎来得到了,好就是这个啊另外呢,还有数量。
12:00
来数量count。INT64。好,哎,64。这是一个这个数量,诶,购物项目里边那个突出的一个数量,还有一个这个金额小计amount。一个fruit。64好,这是这个amount,哎,Amount就是我们这个金额,哎,注意它是通过计算得到的,我们在后边写一个啊,把这个注式也写一下啊,勾物项的这个啊ID。然后呢,这块是个购物项里边的图书信息,诶都可以通过它都可以拿到购物项中的这个图书信息。好,诶这块呢,是购物项里边这个图书的一个数量。好,最后呢,是购物项中这个突出的一个金额小计。为什么是小鸡,因为购物车里边是一个一个的购物项的这个数量之和啊,数量之和好其实这个啊,这个呢是通过计算得到的,其实这个字段呢,你可以不提供,只需要有这个什么呢,一个盖的方法就行,对吧。
13:12
哎,通过哎什么呢,计算得到,那这个怎么得到的?是不是这个count乘以这个book里边这个price。对吧,他来一个price,那这块我整的是64,我book里边这个price是多少啊。要要不然到时候我们转的都太狠了啊,你怎么点点点点不过去了,64好啊没问题啊没问题好来诶这是这几个,呃,这几个通过我们刚刚的这个页面我们分析到的,这里边需要有图书的信息,有有这个数量,还有这个金额,好诶这些呢,我们都已经指定好了,但是还需要有一个你这个购物项将来是属于哪一个购物车的,所以呢,还得有一个购物车的一个ID,诶需要有一个购物车的一个ID,叫一个cut一个ID,诶购物车的一个ID,那这块呢,我们就整一个string类型了,购物车里边那个ID,诶我们就也通过UUID来生成了,就整一个这个,呃,唯一的啊,唯一的不让它自增了,那这里边这些购物项呢,诶,比如这个购物车里边,假设我这个购物车里边已经买了买了四本书。
14:12
哎,存到数据库里边了,那这四本四本到底都有哪些,诶这时候呢,就是一个个的购物项之和了,那这个购物项这个ID就让它自增就行了,那这个呢,我们来自己来定啊,自己来指定,所以这个啊,Cut ID cut ID啊,这个还得大写,这是这一个当前。购物箱属于哪一个购物车?对这块呢,有一个购物车的一个ID,好,这是这个结构题,好那在这呢,我们来提供一个获取,获取这个金额小记的一个方法。Fun get一个什么呢?Amount?Get一个amount,好,这里边方法我们来把这个括号方法加一个cut atom。
15:02
新car item。好,诶,返回值float。64诶64好,那在这呢,获取这个呃方法我需要什么呢?获取这个卡item里边这个图书的这个价格,获取什么呢?当前这个购物项中图书的这个价格,诶来诶price。就等于cut a点一个book,点一个price。对吧,那就这个啊,获取这个价格,然后下面我是不是就用这个数量。我是不是得把这个数量转一下呀。对吧,所以啊,这块return这个return了啊return return什么呢,这个。Float。64。括号,Count。Cut a点一个count,哎,它的这个数量再乘以。
16:01
我的这个。这能看懂吗?诶,我这个among呢,也就是我们购物车里边像这个金额是不是就是这个数量乘以单价对吧?哎,就是数量乘以单价,所以呢,这块哎,我这块呢,这个帽呢,哎,其实呢,你可以不指定它啊,不灵的,有这个方法也行,但是我们这块啊,为了这个呃,也好理解啊,所以呢,我把它也写上了啊写上了那这块呢,同样你这个帽子呢,就是这个抗呢,乘以图书的单价,所以呢,由于我这个图书的这个这个抗呢是in的64,所以呢,我得转一下啊,转到它之后呢,乘以我这个price,最后呢,来返回这个FLOAT64,所以这块来写一下啊,Get amount获取购物项中的这个图数的一个金额小计。哎哎,京城小区由什么呢?由这个图书的这个价格和什么呢?哎,图书的这个数量。计算得到。
17:02
好,哎,就是这个好,这是我们这个结构啊,Cut ato,哎,我们这个写好了,下面我们再来创建另外一个结构叫cut,叫购物车。小姐点一个够。好,拍给你。Model。来看。就是购物车。好,那这里边第一个呢,是购物车的一个ID,哎,这个呢是。购物车。的这个ID。好诶ID频,哎,这个呢,就是我们自己设置的啊,不让它自增了,不让它自增了,好那再往下注意了,再往下我们这个购物车里边呢,是一个一个的购物项,我是不是得把这一个一个的购物项放到一个切片里边。
18:03
对吧,所以呢,诶第二项是卡艾姆斯,就是一个一个的购物项。卡艾斯,诶类型。卡。Aem能明白吗?就是里边啊,因为购物车里边呢,包含一条一条的购物项,所以呢,这一个一个的购物项呢,我放在一个切面里边,将来呢,一遍利是不是就显出来了,诶就显示出来了啊好,这块呢,来写个注释,就是购物车中什么呢?呃。所有的这个购物箱,购物箱哎,存放的一个切片啊。好,再往下。再往下是不是应该有一个总数量跟总金额啊。所以呢,来写一个什么呢,涛。Total count,哎,这是一个总数量,诶来印一个64。这是购物车里边图书的总数量。
19:03
哎,这个是通过计算得到。涛涛。Amount。FLOAT64就是购物车里边这个总金额。购物车中除出的这个总金额。这个也是通过计算得到,好,哎,那现在。还有一个这个购物车是不是得属于一个用户。对吧,哎,所以这块,哎,来一个user的一个ID。Int类型这块你就得跟那个U的表里面那个要保持一致了啊,Int或者是INT64INT64INT,我那个U的是啥。Int,那就int了啊,就int了int了好,哎,这是这个。好,这是这个啊U的ID,也就是购物车,呃,属于的这个用户。
20:05
当前购物车。所属的这个用户好。保存好,这是我们这个结构,那同样下边这两个呢,我们既然是通过计算得到你,我来给们给他提供两个get方法,Get一个什么呢?Total。就是获取诶购物车中诶图书的这个总数。总数量。好,我们先把注释写了啊,Get一个total。Amount。这是获取哎,购物车中图书的这个总金额,好,来写这个方法啊,Fuck括号。Cut。新cut。好,Get一个total。Cotton。哎,获取这个总数量,那返回一个int的一个64。
21:06
好,那在这我要获取这个总数量,注意了,这个购物车里边这个总数量是不是各个数量之和。那我是不是得便利购物车里边这一个切片。对吧,所以呢,诶这块诶来诶。便利购物车中的这个什么呢?购物项。切片好来。嗯,K不要了啊。V。等于。Cut,点一个cut,艾斯能看懂吗?这个啊,哎,便利这个购物项,得到一个一个的购物项,哎,然后呢,我们在这边呢,先整一个啊,整一个word一个一个什么呢,Total count。整一个INT64。
22:03
先放这,然后在这里边是不是偷偷count等于total count加V点。Count。能看懂吗?这能看懂吗?哎,本来哎,我有一个逃头看的,然后呢,哎,假设啊,假设我这里边呢,就是现在的第一个购物项呢,是二。刚开始呢,这个是零循环,第一次这个是二零加二,这是不是它不是变成二了呀,哎,循环第二次时候呢,又加了一,是不是变成三了,哎,第三次呢,又加了一变成四了,所以最终呢,就是我们这个总数量了,总数量量就这个啊来return total count。好,诶,这是这个获取购物车中图数的总数量,那么同理。获取总金额是不是也要便利?Cut cut。Get一个。Total amount。
23:02
好,诶这一块呢,哎,返回值是FLOAT64。好,那同样,哎来便利。我先把这个粘过来改一下啊,CTRLC。哎,把这个改一下,改成total amount改成一个。Float。六四好,然后呢,便利这个勾物项切片得到之后呢,诶用它加CTRLC。CTRLV。CTRLVCTRLS,好,这个改了V点一个。Amount购物项里边每一个这个。啊,这个没改啊。CR v controls,好,就是这个啊,就是这个在我们这个,呃,Cut这个结构,还有这个。Cut it这个结构里边啊,我们提供了这个获取金额小计跟获取总数量跟总金额的两个方法,哎三个方法,一共三个方法,好,这是这个结构啊结构,那好,那下面啊,我们来创建对应的表,创建这个表的时候。
24:14
诶注意了,我们这里边呢,保存的啊,是这个总数量跟总金额以及外线,诶不保存其他的内容,所以呢,来打开我们的数据库。连接。来,我们首先呢来创建这个cut as购物项的这个表。Create。Table叫一个cut下划线,埃斯。来创建这个表,好,诶第一个呢是ID,这个ID呢,让它自增购物项,让它自增就可以了,哎,Int类型primary key。凹凸。Increment好,那第二个,哎,注意了,第二个这个什么啊,我们这个购物项里边这个不可不要了,我要用一个外键关联那个不可表可不可以。
25:11
可以吧,所以啊,第二个呢,我们来保存count和amount,也就是你这个购物项买了这个,就是这本书买了,买了这个多少本,哎,一共花了多少钱,哎,把这个能给它保存进去,所以呢,诶来第二个字段叫count。Con。什么类型的?Int对吧,Int,然后呢,我们写一个not not啊。好,第三个,第三个呢是amount amount就这里边一个总金额小计,金额小计,所以呢,这块来amount。Double类型。11逗号二,哎,保留两位小数,闹一个闹。好,再往下注意了,哎,现在呢,我这个表里边呢,就来保存一下,你当前这个图书买了几本,一共花了多少钱,其他的没有了,那下面这个图书是谁吗?是谁呢?需要有一个book ID。
26:11
哎,就是这个图书的一个ID我才知道哦,你买的是哪一本书,哪买的哪本书好book ID,那book ID呢,这个就得根据那个books那个表示,那是也是int类型,所以呢,Int,诶not一个not好,最后一个还有一个字段。因为我们这块啊,保存时这个book呢,本来是book,我们现在呢,变成了一个book ID作为一个外键,也就是说我们那个购物项那个表将会有两个外键啊,有两个外键,最后还有一个卡的ID,就是你的购物车,诶里边那个ID,也就是说我这个购物项到底属于哪个购物车。哎,所以啊,还得创建那个,但是我们现在这个购物。购物车这个表还没创建是吧,我得关联它,诶得先创建那个表,那这样啊,我们把这个呢,先先剪切了啊,先剪切了,先暂时呢,放到我们这个色库里边。
27:02
好,诶来。什么呢?创建购物项表。好来先先放这啊,一会我们再来,再来改啊,再来改,我们先来创建这个购物车的这个表table叫一个cut购物车。好,那第一个ID,诶,我这个就不是自增了啊,不自增了,我们自己来设置primary。K,诶primary k组件好,第二个第二个再回来看我们这个了,第二个这个同样这个呢,东西呢,我们里边是保存不了的,所以呢,我来保存一下购物车里边的总数量跟总金额,哎,保存购车里边的总数量跟总金额,哎,还有这个U的I Du的ID,所以呢,诶来在这里边。总数量。偷偷。Cut cut,总数量int类型,Not,一个not。
28:02
好,下一个总金额total amount。哎,Double类型11逗号二,好,哎,Not一个not不能为空。好哎,再往下呢,改那个外键了,购物车到底属于哪个user,所以呢,User的一个ID int类型,好哎,Not not。好,我要把这个U的ID呢作为一个外键,所以呢,同样。P。User的一个ID,然后reference。我的users的一个ID,好,诶,这是这个,我们先把这个表创建好cut。走。好,成功了。来。卡没问题啊,没问题,来把这个呢,S口L语句CTRLX剪切了,来回到这,来回到我们的SQL这个文件里边啊。
29:02
创建购物车表。CTRLV,好,就是这个,嗯。命令好,我们把这个呢再拿过来啊,再来写一次。创建购物箱。CRV,好,哎,ID让它自增,哎,Count购物箱里边的数量,购物箱里边的一个,呃,进而小计,哎,Double,哎,Book的ID,哎,就是你需要这个,呃,引用book的哪一个图书,哎呀,你得告诉我你买的哪本图书啊,所以那这也是一个外键,还有一个叫cut。Cut的一个ID,哎,我这个购物项呢,属于哪一个购物车,诶这块呢,我。100吧。Not,一个not,好,现在呢,需要有两个外键了。T,第一个不可ID。Reference。
30:04
我的box表的一个ID,好,这是一个,哎,还有一个来复制了。CTRLC。CTRLV,好这块呢,这是一个cut ID。呃,关联这个cut这个表的ID。好,哎,就是这块啊,我们这个卡呢,已经创建好了,诶里边这个是指定的ID吧。ID好没问题啊,没问题,好来执行一下有两个外键。走。诶,错了。哪一块错了第九行。啊,就多了一个逗号,啊,多了个逗号。来,诶执行。好,成功了F5。F。来,诶这个。
31:01
打开勾物项那个表,诶好诶没问题,哎,两个啊两个这个两个外键,两个外键,你这个点一下它可以关联某一本图书,诶然后呢,点一下它,诶可以知道属于哪一个购物车,诶哪个购物车,所以这个时候啊,其实呢,我们这个里边的这个信息,你这个购物箱里边到底是哪买的哪本图书,这个数量,我们通过这个外线就知道你买的是哪本图书了啊哪本书了,好啊这是这个两个表跟这个两个结构,哎,我们这个写完了,那接下来我们要做的就是呢,来写这个。Du来写这个对数据库的一个操作的一些方法了,或者说函数啊,我们把这个先粘过来。诶,我刚刚的那个呢,哎,对,哎这个啊,这个没了CTRLX。好。CTRLVCTRLS,好哎,就是这两张表加两个结构,诶,我们写完了啊好,那这个下面啊,这个你我们先休息一下吧,啊,学习完之后呢,再再写这个啊。
我来说两句