00:00
好,看一下我们这个页面啊,这个页面基本的已经完事了,那么接下来我们这个开始往里添加内容,添加完以后呢,把这个图片给它进行一个上传,其实如果不上传很快我们就能做完,知道吧,如果不含图片来看一下。那我从这里边哈,找几本书。比如说这个这个叫什么正面管教是吧。对,就这本书哈,这个书名就叫正面管教对吧?来复制一下哈,来作者是谁呀?美什么简尼尔森是吧,美国的。好,然后价格是多少钱。38块钱是吧,现在是23块七是吧,嗯,23.7好,然后出版社是哪里出版的。北京联合出版公司2016年7月来,我尽量写的稍微真实一点,好吧,尽可能啊。哎,那年不能换马吗?哦,在这里是吧,2017年6月是吧。
01:02
一六年吗?啊,16年7月。还有日啊行,无所谓了,嗯,好,然后这里边有个简介是吧,就这个行吧行吧,我们不写别的了哈,就这个了啊好来,然后接下来图片啊,图片的话怎么办呢?我把这个。呃,图片还得,哎呀。还得那个叫什么下载下来。这张图片来保存,不能选这张图片啊,这网络图片没法没法那个选择啊,我们只能放那个放到我们这个这个项目里边,然后我们再选择把它上传啊,在这里来选择文件。来这个打开打开看到吗?哎呀呀,这个对这个图片就我们在这里显示的时候,它是不是太大了,嗯,太大了,然后呢,给它设置一下。对。宽叫max杠。
02:03
杠什么杠wi?D啊,来个最高就是最大就200T行吧,宽度啊高度有公线的,对现在一个它就行好了好了,对现在我们不管了哈,然后点击添加提交交啊数据看一下这边。交到了吧吧,交到了啊好来注意啊,接收到这张图片,它是一个地址,就是也就是说它只是一个书,那个图片的名字听到了吗。你在这里能看到的就是一个图片的名,而我们真正的要做什么?要把这张图片上传到网络服务器的指定位置。明白我的意思吗?你必须把它上传到指定位置啊才能完成啊,那怎么去做哈,来在我们当前的这个views啊,这个视图函数里边,在这里啊,有一个方法专门接收上传的文件啊,接收上传的,接收上传的文件用谁呢?啊,用这个request啊request.post是接收post的提交数据。
03:04
request.get是接收get提交的数据啊,request.s是接收上传的文件对象啊,点Fi res PS,呃。点get括号获取,然后那个呃,提交的时候,我们那个图片名叫什么呢?这个字段名叫杠U对吧,好,那你就。在这里写子杠UR,子子杠UR听到吗?啊,这么写啊,然后呢,如果没有的话,默认为no,听懂了吗?能理解这意思吧吧,这是接收上传文件,然后接下来呢,我们判断判断一下这个文件是真还是假,就有没有上传,如果这个上传的文件为真,我们接下来是不是就处理上传到处理啊文件的上传操作,是不是接下来做这个,如果他没有的话呢。如果他没有的话呢。嗯。那我们是不是还要上传,你就那意思。
04:00
是不是要添加添加添加。还是说没有图片?就是不是必须得上传图片,不需要是吗?不需要的话,那这样的话,那这样的话我们那个模型类就得改改。模型类就得改改模型类,你这个图片就不是必须的了。对,那就是这个位置,要么给个默认值,要么那等于TRU,叫t rue。道吧,你必须改,而且你在这里改完,对你就必须得那个什么啊呃,页面里边别有什么地方报错,对来这里先pass对,然后这里改完以后还得干啥,对应的就得生成千元文件MAS。好好好。然后麦MIG,嗯,就必须得改啊,不改不行哈,对来认。好,也就是说他如果有文件上传,我们接下来就处理对吧,就处理处理这个,嗯,里面写什么内容。
05:00
写怎么去上传呢?啊,打开文件开始往里写写。打开一个位置往里写就行了啊,位置CH啊不对W嘛。例open括号,然后写我们的那个地址对吧?啊,地址把它传到下去对吧?啊,比如说举个例子啊,先存到N下的ST tic下到嗯,那个叫W的U的里边去,然后呢,比如说叫一点勾BG可以吧啊然后呢,这个位置叫W加模式对吧,WB加的模式对,然后呢,这不就不用写了,Is FP,这不上传对象对吧?然后这里边是FP.v的read的,把谁写进去,把我们这个费。听懂了吗?哦,YWD的写入,把这个文件写进去。WBB。需要加吗?啊啊第二个是模式要加对,要加模式对不对,模式啊要加好了好了,然后呢,注意啊,这位置是这样写,但是你这个图片的名这样对吗。
06:07
不对这个图片名怎么办?啊,把他上传的这个图名名拿过来吗?他提交的这个图片名名叫什么?哎,哪去啦啷当。报了一堆错误,中间跳一跳,看这看这是不是这个名字,能行吗?书名。对,首先第一点哈,他提交的图片叫什么名字,你就用什么名字,这是有问题的。明白了吗?这是严重有问题的,他提交个图片叫一点勾BG啊,另外一个人再提交一张图片叫一点过VG。那你说从哪拿的?明白这意思,对,这个名字是不是就重复了,你一个文件里面肯定重复了,没法重复,你要么就覆盖了,要么就把它删了,是不是这个意思,对,首先这样的话就不能用,对不对,另外一个啊,刚才那个谁说那个把咱们这个改成那个叫什么正面管家那个图片名对吧。啊,那个可以,除非那你就保证你这个图片名字,这个书名不要。
07:02
对吧,啊对,所以怎么办呢,你最好呢,是弄个随机束缚,再加个时间保证它不能重复就可以了,可以了。明白了吧,随机数加C图,然后呢,写数据的时候,把这个新生成的文件名,文件文件地址和文件名加上我们的这个相关信息一块存到数据库里。就可以了,听懂了吧,对,到时候你通过这个呃,这个图片的名字和地址能找到它就OK了,OK了,明白了吧,所以这个地方啊,文件的名字字不能这么写写啊,文件的名字不能么写,文件的名字你得怎么写啊,得用随机数,我们字最最少啊呃叫fairre内,Fair内得怎么办呢?得去随机啊,随机我们是得导随机模块。那个虚拟模块是音的m pot,嗯,叫什么?来random吧R。对不对啊,random.r是吧?Int是这么写的吧。是吧,是吧,从。
08:02
随机个几位数数。猥琐对吧,然后再加上一个时间time.time.time括号。这样的话,这个文件的名字是绝对不能重过了,过了。嗯,对不对,没错吧,啊这位这个位置,然后呢。从数据库里读出来的呀。数据库里不是记录他的地址和图件和文件名了吗?对吧,上传到我们的服务器,我们就把它记下来,那就是我们说了算明白了吧,好这位档啊时间戳加随机数对吧,搞定以后,然后呢,但是注意这个是前面这个名字,它后面这个怎么办。啊,就是这个划括号这个内是吧。对吧。他上传个GIF的图片呢。他上传个PPT的图片。是不是就不行了?对不对,是不是就不行了啊,所以怎么办呢?我们这个看一下啊,我们这个叫fair fair这个文件对象,它专门有一个变量啊,有一个属性叫fair name。
09:12
它自己就有一个fair容,就能够获取你当前的文件名称,听懂了吗?然后我们想办法截取到后边的这个点D,这个内容怎么截取以点s lit括号。点对吧,然后点再什么。点泡泡行不行,对吧,泡泡是不是弹出最后一个对,是不是就最后一个个对,把它弹出来放在前头了吧,对不对啊,然后我们这个名字再加上,再加上这个,这个是一数,是不是就拼上他的名字。对吧,然后这个味道哈。加上他。上家能进吗?不行,后边是字符串,前面是数字S转,再加上。
10:07
哎,这个是不是也不小,这个是随机的整数,这个时间数是什么。时间戳也是一个那个叫什么来数字对吧,没事,他也可以讲是吧,也可以讲没关系。对吧,啊好,放在一起加在一起,然后字符串再加上它,那最后的话,这个名字是不是就齐了,中间的点是吧,加上大不了就多个点吧。对吧,好,然后这个地方是不是可以删掉了。可以了吧,好这就行了啊好,然后另外这个地址怎么写。地址写成跟下的d uplo行不行?跟下的tey upload行不行?是斜根下的十力,还是写点杠十力?写点到。
11:01
得得写。如果写跟。对,在系统F盘目录里边,就在系统里边。明白了,完了,我们当时讲文件操作讲了吧。写真是什么?有人蒙圈了,人家还在项目里边,其他地方你都写真啊是不是?这是两种区别啊。两种区别哈,如果是相关的系统操作,那个根指的就是系统盘,听懂了吗?就是系统盘,你如果是linu系统,那就根就是你系那个linu系统的根目录,听懂吗?是指文件操作类型的。比如说文件的读取。文件的那个写入这些都是听懂了吧,这个路径必须是啊,真正的路径你可以写绝对路径,但你一个绝对路径你不能写跟下的,那就是在根目录里边要有一个文件夹,听懂了吗?所以这个要写点杠,点杠指的是当前服务器,当前服务器在哪里呢?当前服务器在哪呢?当前服务器在这,我们是不是从这个位置启动的,所以点杠在这个位置,听懂了吗?然后这里边是不是有一个uplo up。
12:09
叫还是叫up?可以吧,嗯,也就说把图片给我上传到这个里面去,所以这位就写掉了,其他的路径都是以服务器路径来命名的,都可以以根根开始听了吧,但凡系统操作相关的啊,系统和文件操作相关的内容都要这么写明白了吧,啊,注意到这个点哈,对,然后你要觉得麻烦也可以。咱们那个settings里边是不是有一个。背第二啊,你可以把那个目录拿过来也行,那个是绝对不解。对不对,那个是从L盘开始制定的。对吧,啊,写那个文件行啊对,我们这里就不写那个了啊,就这么写了可以吧,兄弟们好,这个文件上传哈,然后呢,判断一下文件上传啊,上传完成以后,接下来怎么办呢。嗯,这个里面要把那个文件的名字给返回,文件的名字是谁呢?是这个位置对吧。是这个位置要把路径也给他返回了。
13:01
想想路径返回。码这个不叫就叫就叫内,别叫F内好完事上传完成以后啊,这里叫啊不对,Return不是return了啊fair name等于什么呢?等于当前的一个弟子加他。这个地方就得写根了。这个地方就是因为这个信,这个地址是不是要我们存到库的。明白了吧,而从数据库用image读的时候,读到根下就行了。明白了吧?所以他俩在这个地方有点区别啊,对,没事,呃,不用纠结,晚上慢慢纠结啊对,现在别纠结了啊,好了,来这个内容写完以后,我们是不是要把它放到我们的date里边,把这个地址给它替换掉,替换掉,所以这里怎么写呢啊,下边就图片上传完成以后,Date中号里边的,哎,不对。应该还得写到这里啊对,所以这里是date中号里边的内杠URL,它应该叫等于c r name看到了吗?这么做做对,听懂了吧,啊好,但是这么写你看我们这个代码处理是不是就麻烦了很多啊,所以怎么办呢?把它CTRL加X。
14:18
CTRL加X剪切放到另外一个函数当中,专门分装一函数进行文件的上传。啊,比例子做这个操作看到了吗吗?对,然后他接受一个,嗯,别接受了,就写request吧,Re request,我接受一个request对象,然后最后啊在这里呢,做一个判断上传成功还是失败了了。如果成功,返回return fair fair name,如果失败,EXCEEX,返回FA。
15:05
看到了吗?同学们好,那么接下来我们在这里去用的时候就这么写。嗯,判断啊,文件进行文件上传,文件上传这里呢,写那个叫if。哎,怎么写的哦,在这里写行子uplo,然后把request传给他。看了吗?看意思吧,他成功,因为他这里直接是调方法了,这个方法是不是就把旅游会子对象接过来,然后开始文件的上传对吧?如果上传成功返回的文件名,如果上传失败,返回了1BOS对吧?好,我们在这里就可以判断我们当前的这个谁对还是错误了,对吧,这。中号二,这么写啊,我看看,我可以这么写,妹妹等于他,然后在这里去写判断断发妹妹。
16:02
如果他为真。负责。对吧,如果他被讲。如果他会讲什么?如果它为甲20,那我们把date里边的谁呀?那个银粒子幺,它弹出去就不存了吧,你们不是不存嘛,无所谓就不存吧,不存就这么显示。看到了吧。啊,再看一下这个文件是干什么,接收表单提交数据,进行数据的相关添加,这是接收表单数据对吧?这是进行文件进行进行文件进行。图片的上传,图片的上传,然后这里做了个判断啊完事,下边以后呢,执行数据的添加,就这里这里要执行数据啊添加,当然他有可能失败,对吧吧,TRY包裹起来,如果成功怎么办?如果失败怎么办?如果成功是不是正常来讲应该跳转到列表一样,那我们这里先写成response,先写成成功可以吧,先写个成功可以吧,啊如果失败,这里就写个失败。
17:10
可以吧,兄弟们,就这么多啊。能理解吧,啊,那这样的话,这个数据的添加这一部分就完成了,那那么我们测试一下啊。看一下我们的服务重启了,没问题吧。啊,没问题啊,重启了,好来这里帝王啊,嗯。直接提交不行吗?看一下我也不知道行不行,不行我们再说呗呗。这么慢吗?报错fears if fear判断w request attributes没有找到。FEFI。ES吧,我是不是写错了?呃,哪个位置这个下边这个位置这个是大小吗。
18:01
Is是这个吗?哦对,我post的也是大写是吧,Fair点这个味道好重启测一下啊,退回。然后图片选择一下这张是吧,打开诶。这段为什么没显示啊?为什么没显示呀,哦,对,因为因为他没有发生改变,变。对吧,现在打开发生改变了吧,对他就可以了啊对点击添加。还有问题吗?好,K2妹子122。KK是date点泡妹子,UR。以妹子UR有什么错误?一。啊对,我要把它删掉嘛。对呀,有图片怎么会删掉的呢?Print name下边的先注释掉好吧。
19:03
可以吧,下边注掉啊,然后HT TB HT TB po。看一下有什么问题啊,哪里出错了,然后我们看一下图片有吗。上来吧,图片这不上传了吗?我图片上传错了吗?卡这这。图片上传错误。来看一下那个叫。呃,底江过的官方文档打开看一下啊。哎,或者我那个课件这边也有有课件呢。课件在哪呢?在这里打开看看啊。我这里边写了那个关于文件上传的操作啊,这里。文件的上传time time,然后找到元素进行上传。啊,这是直接open打开位置open不也行吗?对,然后这里最后又做了一个关闭,嗯,文件上传非二啊。
20:10
我感觉我好像没有写错。没关系,重启一下啊。重启一下,我们退回去看一看,我们的数据哪里有问题啊,点击添加。内蒙HTHTTP。Responsible。哎,这个错不错误改过来来对,来看这边有没有内容。看到吗?就证明你这个文件上传这个地方是不是出错了。这个地方做了对,然后这样,为了让我们能看清错误啊。踹一个下等式,就导致他不报一层,对,让他报错,要不然他不报错,我们也不知道哪错了对吧?对,让他报出来好了啊,来继续提交。
21:01
你怎么不报错呀?继续。什么?一妹子lo FP点他说,我这位子行。这辈子显什么错误?我这个文件上传用的是ma,没错。但他用的是open。斑块写入。WB加他是分号,我是没有那个分块,直接就开始那个。嗯,往里写啊。非要切块不切块不能吗?FP掉了。它这里必须要分化,那我们就嗯按他的写,按这个叫切块处理处理。
22:00
来,往前走,嗯。等一会你说分块here,把我们的文件名拿过来,这样。还有PP先测一下,先测一下啊,分一块写入完事以后。写入以后再去读内容啊。啊,服从讲讲,嗯,第61行。哦,这个设定还有问题。要了吧,嗯。好,没有了啊,来来再测试一下,继续重你写入成功了啊,来看这个位置位置返回了吧,返回来地址啊,然后3481看一下这张图片有没有。三四。八幺来。在里边去找一下这个图片。3481有吧,有其他的都写入失败了对吧?好,这就证明他写入成功了啊。
23:02
这个怎么怎么。框不掉,好那么我来再来解释一下这个关于这个分块是什么意思哈,你来看这位的啊,当前我们open打开一个文件对不对,打开一个文件,然后他在这里干什么呢?它是把上传的文件这个非二是不是上传的那个文件对象,文件对象进行切块,切完块以后再写入。就是这个位置是切块,切完块以后循环是不是开始往里写,一块一块往里写什么意思呢?就是说呃,如果就是它它的那个官方文档解释的是这样的,就是如果文件过大。如果文件过大,比如说一张图片一个G。你你写入的过程会相当漫长,听懂了吗?就是程序会阻设置,就是会停在这里一直写写写写,但是很慢,听懂了吗?就说白了,我现在给你五个G的那个,呃,一个文件五个G,你打都打不开,费劲,听懂了吗?对,但是我们可以用程序读一点点往上读,那没有问题,所以这个位置这个这个是在做什么呢?就是把这个文件切成块循环的往里写,不是一下子往那个写入进去,这样的话就速度快,它不会被卡住,听懂了吗?
24:02
那列的意思啊,就是说白了,比如说一个文件是500兆,那它切成100兆,一个100兆一块开始一读一块往里写一块读一块往里写一块,那这什么。冲冲冲。能理解吗?我再跟你讲。你看你把一个文件切成块,它这个位置就是切成块了,这样这个就是切成块块。切成块以后,它是,它如果是个列表,你怎么往里写写你是不是用循环最合适,你怎么知道它切了几块。就这么说吧吧,那个我现在给你一行那个文件一行,你一次只能写一行,那你读出来直接写不就行了吗?一行对吧?但如果它里边有十行,我让你一行一行写的吗。怎么办?还记得我们以前是不是文件可以写成一行一行的行的,对吧,可以换行写,那你是不是读出来它是一个列表,列表,然后读一行写一行,读一行写一行,是不是这样做,这个道理就是这个东西。
25:05
这里就这个个啊,可以可以看一下那个光门档档,好吧好吧,不用纠结啊,来找一下光棍档,我给你看一看一下。无法翻译,哎,为什么?不能翻译拉倒找一下那个叫。呃,在views视图request这个位置,再去找他的请求对象HTTP。请求对象领导,哎,这是想对象。Request。啊body pass pass这个麦的,我们刚才是不是用法啊,判断它是请求方式方法,对,然后还有别的啊,他你看它是不是有get有po的方法,然后还有一个叫菲看到吗?对来这里边它是不是告诉你的如何进行那个文件的上传操作,对吧,告诉你你的那个文件表单里边必须是。
26:02
那个有有in对吧,并且必须是po的提交看到吧,然后呢,它这里边有说明upload。啊嗯,也就是说它这个对象是一个上层的对象,然后在这个对象里边有一个方法进行切换,这个位置进行了切换,来翻译一下,看一下这个位位置。嗯,它是一个生成器返回文件的框。啊呃,如果这个结果是一个处,则应该循环使用此方法,而不是使用read,实际上是通常使用叫什么?通常使用切块,然后循环而不是read,确保就是最后一句话就是使用这个循环它,而不是直接read读出来往写是确保大文件不会占用系统内存。就是这个意思。嗯,如果你要想看它是什么,回去自己去打印自己去看就行了,好吧,我这里就不不在这里给你占用时间可以吧们,嗯,明白了吧,就说白了,它主要的目的就是把文件切块,防止大文件占用更多的系统内存和资源,明白了吧,啊这样的方式来做。
27:05
那这里那个上传文件的名称,上传文件的大小啊,上传文件的叫什么的tab,就是它的内容类型是什么类型的,好吧,都有说明啊。嗯,说白了就是这个东西要明白,你就多翻一下文档可以吧,可以吧吧,嗯,我就先这个内容就说到这可以吧,好,现在啊就太正常了啊,太正常了,没有问题,以后我们再回到刚才的那个方法中出。Ex except对吧,关闭有不需要写写啊,然后呢,如果没有问题,上传完成以后应该给我返回文件名称对吧?如果有问题,Exce PT冒号叫什么呢?Return ret false r,对,然后他反对吧,其实刚才应该反应false了,结果我们上面依然报错了,就证明我们这里还有问题。一服判断它如果为真,我就做这个操作,然后泡的时候出错了是吧。
28:03
泡泡的时候为什么出状?啊。一妹子UR他没有的时候把它删掉掉啊,算了算了,先把它删了了,然后下边的执行这个内容,把这个干掉啊,看一下数据能不能添加进去啊,我们先看一下输款啊来刷新。啊,现在是空的吧,空的啊,然后我们上传的文件那个页面刷新也是空的啊,那么接下来我们重新上传啊,来退回到我们刚才那个页面,然后就这里吧吧。嗯。选择图片啊,然后接下来添加。我操操服务刚才没看。他奶奶个腿来继续添加就行了,成功了吧,好来看一下,首先看一下数据库的数据有没有进去啊。数据进来了吧,啊,时间日期这些内容都对吧,我看到是不都过来了,好,然后看一下那个谁咱们的文件11416,看一下数据库这个个幺幺。
29:06
416对吧,11416没有问题吧,对,这是数据添加什么了。好吧,你注意哈,这张图片上传到我们的文件以后,和用户就是那张图片,和这张图片没有一毛钱关系。虽然它俩图片是一样,这个只是作为我的客户端,我是没地方存了,所以在这里选择一张图片放到这里上传,听到吗?上传到服务器,这张图片在哪里?是服务器我们的整个外部文件夹,里边的内容就是我们的服务器的内容,听懂了吗?明白了吗?说白了就是我如果现在让他让你可以访问,你从你的那个桌面上选择一张图片上传,就可以进到我这个位置,听到了吗吗,你就可以做添加,然后进来来。能理解吧,这张图片就进到这个里头,然后我呢,接收到你的那个文件以后,把它处理上传,写入到我的文件服务器里面。其实说白了就是你选择一个图片给我,然后我呢,通过读你给我提供一张图片,然后写到我的我的那个指定的文件夹里里边,然后并且把它记录下来,我是不是把它记录到数据库了,对这张图片就完事了,这是一个基本上传操作,看懂了吗?现在们啊,那么接下来哈,我们去多添加两个啊啊当然了,你这个添加完成以后,是不是应该得到一个列表一样。
30:19
啊,只不过我们现在还没写列表,所以先不管了哈,来刷新一下,这里再写一张图片,再写一个别的吧。活的这边这边。有点慢慢流浪地球。断舍离。我这名气,这个日本人写的这个书怎么样?不会来祸祸我大中华的吧?出版社是哪里?广西科学时间我随便填了好吧。嗯,然后警戒。随便写一个放到这里,选择这张图片,我的妈呀,这张图片我得下一下。
31:16
选择图片。是这个吧,啊不对,是这个个打开可以了吧,好,然后点击添加,添加进去了吧,好就完事了,看了吧,对好了,回头这个我们就简单的写这么两三个就行了啊,写那两三个回头那个自己可以,嗯,就是你排下来这个数据可以往里添加一下就OK了了。长方形的吧,啊,这个就是我们的基本的添加功能啊,这个就做完了好吧。
我来说两句