Web开瓶发这本书基本上做完了,后面还需要温习,但是自己做的博客总觉得简陋了点,所以,在动脑子开发新功能
<强>今天想到最基本的功能,自定义头像强>
那这样的功能,设计到2大基本功能块
1:如何进行文件的上传和保存
2:如何在用户模型里面将头像照片和用户挂钩起来
第二个问题我在查阅了网上的讨论后,得出基本上2种方法,
第一种是将图片变成二进制以后存入数据库
第二种是将图片直接存放于文件系统中
先研究如何上传文件成功这个事情
<强>从最简单的开始强>
在主要的看法文件内,添加以下准备工作
进口操作系统 从进口瓶瓶,请求重定向,url_for UPLOAD_FOLDER=r说:\ flasky \ app \上传”
设置UPLOAD_FOLDER的路径,表示文件最终要存在哪一个位置
@main。路线(“/upload_file”方法=[‘得到’,'文章']) def upload_file (): #…… 如果请求。方法==癙OST”: 文件=request.files(“文件”) file.save (os.path.join (UPLOAD_FOLDER, file.filename)) 返回的& lt; p> success</p>” 返回“ & lt; !DOCTYPE html> & lt; title>改变新的icon & lt; h2>上传新的& lt;/h2> & lt;形式行动=" " method=" post " enctype=多部分/form-data> & lt;输入类型=拔募钡拿?file> & lt;输入类型=疤峤弧奔壑?https://www.yisu.com/zixun/Upload> 形式> "
然后为上传文件功能单独做一个路由,是专门用一个页面来提供上传文件
文件=request.files(“文件”)表示,从请求请求的文件字典中,取出文件对应的文件。这个文件是一个FileStorage对象,这个我们后面再讲
这个文件对象拥有一个函数功能来保存文件,叫做保存()
这个文件对象还拥有一个属性来提取文件名,叫做文件名
他的参数就是路径名称
如上面代码,我用了os.path.join拼接的方法来做出保存路径名
至于提交保存以后的返回页面,我先简单做了一个显示成功的页面表示功能成功
而整个页面的渲染,直接在返回里面写入了这个表单,我们来看看功能
PS:在用户资料页面,我已经加入了按钮来通向更改头像的页面,这个就不多说了
好,最重要的一环节上传文件已经完成了,接下来的工作就是对代码的完善了
比如,添加指定允许文件类型的范围
ALLOWED_EXTENSIONS=组([txt, pdf, png, jpg, jpeg、gif的])
于是乎,代码变成了
UPLOAD_FOLDER=r说:\ flasky \ app \上传的 ALLOWED_EXTENSIONS=组([txt, pdf, png, jpg, jpeg、gif的)) def allowed_file(文件名): 返回的。在文件名和filename.rsplit('。', 1)在ALLOWED_EXTENSIONS [1] @main。路线(“/upload_file”方法=[‘得到’,'文章']) def upload_file (): 如果请求。方法==癙OST”: 文件=request.files(“文件”) 如果文件和allowed_file (file.filename): file.save (os.path.join (UPLOAD_FOLDER, file.filename)) 返回的& lt; p> success</p>” 返回“& lt; p>你上传了不允许的文件类型& lt;/p>” 返回“ & lt; !DOCTYPE html> & lt; title>改变新的icon & lt; h2>上传新的& lt;/h2> & lt;形式行动=" " method=" post " enctype=多部分/form-data> & lt;输入类型=拔募钡拿?file> & lt;输入类型=疤峤弧奔壑?https://www.yisu.com/zixun/Upload> 形式> "
好,讲到这里,就要回过头来看看瓶官方文档的说明了
首先第一点,请求的文件属性
所以说,非常方便,可以通过文件。文件名,直接获取文件的名字
另外,这个文件对象,可以直接用保存功能储存,2可以有2个参数,一个是dst表示存放路径,第二个是缓存尺寸,表示在存储过程中的大小,默认16 kb。