Flask Web 开发这本书基本上做完了,后面还需要温习,但是自己做的博客总觉得简陋了点,所以,在动脑子开发新功能

今天想到最基本的功能,自定义头像

那这样的功能,设计到2大基本功能块

1:如何进行文件的上传和保存

2:如何在用户模型里面将头像照片和用户挂钩起来

第二个问题我在查阅了网上的讨论后,得出基本上2种方法,

第一种是将图片变成二进制以后存入数据库

第二种是将图片直接存放于文件系统中

先研究如何上传文件成功这个事情

从最简单的开始

在main的views文件内,添加以下准备工作

1

2

3

4

import os

from flaskimport Flask, request, redirect, url_for

UPLOAD_FOLDER=r'E:\flasky\app\upload'

设置UPLOAD_FOLDER的路径,表示文件最终要存在哪一个位置

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

@main.route('/upload_file',methods= ['GET','POST'])

def upload_file():

#...

if request.method== 'POST':

file = request.files['file']

file.save(os.path.join(UPLOAD_FOLDER,file.filename))

return '

success

'

return '''

Change new icon

Upload new

'''

然后为上传文件功能单独做一个路由,是专门用一个页面来提供上传文件

file=request.files['file']表示,从request请求的files字典中,取出file对应的文件。这个文件是一个FileStorage对象,这个我们后面再讲

这个文件对象拥有一个函数功能来保存文件,叫做save()

这个文件对象还拥有一个属性来提取文件名,叫做filename

他的参数就是路径名称

如上面代码,我用了os.path.join拼接的方法来做出保存路径名

至于提交保存以后的返回页面,我先简单做了一个 显示 success的页面表示功能成功

而整个页面的渲染,直接在return里面写入了这个表单,我们来看看功能

PS: 在用户资料页面,我已经加入了按钮来通向更改头像的页面,这个就不多说了

好,最重要的一环节上传文件已经完成了,接下来的工作就是对代码的完善了

比如,添加指定允许文件类型的范围

1

ALLOWED_EXTENSIONS=set(['txt','pdf','png','jpg','jpeg','gif'])

于是乎,代码变成了

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

UPLOAD_FOLDER=r'E:\flasky\app\upload'

ALLOWED_EXTENSIONS=set(['txt','pdf','png','jpg','jpeg','gif'])

def allowed_file(filename):

return '.' in filenameand filename.rsplit('.',1)[1]in ALLOWED_EXTENSIONS

@main.route('/upload_file',methods= ['GET','POST'])

def upload_file():

if request.method== 'POST':

file = request.files['file']

if file and allowed_file(file.filename):

file.save(os.path.join(UPLOAD_FOLDER,file.filename))

return '

success

'

return '

你上传了不允许的文件类型

'

return '''

Change new icon

Upload new

'''

好,讲到这里,就要回过头来看看Flask官方文档的说明了

首先第一点,request的files属性

所以说,非常方便,可以通过file.filename ,直接获取文件的名字

另外,这个文件对象,可以直接用save功能储存,2可以有2个参数,一个是dst表示存放路径,第二个是缓存尺寸,表示在存储过程中的大小,默认16kb。

我们来看下效果,我们用MP3后缀名的文件来进行测试

我在检测到是不允许的文件类型时,返回写了一句提示

接着,我们要再讲一个功能 secure_filename(),他是防止用于起一些可以影响到系统运行的文件名,来扰乱你的网站

比如如官方文档所说的

再来看下这个函数的功能,其实他为了保证文件名不会影响到系统,他就把文件名里面的斜杠和空格,替换成了下划线

这样,就保证了文件只会在当前目录使用,而不会由于路径问题被利用去做其他事情。

所以,在储存文件之前,通过这个函数把文件名先修改一下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

@main.route('/upload_file',methods= ['GET','POST'])

def upload_file():

if request.method== 'POST':

file = request.files['file']

if file and allowed_file(file.filename):

filename= secure_filename(file.filename)

file.save(os.path.join(UPLOAD_FOLDER,filename))

return '

success

'

return '

你上传了不允许的文件类型

'

return '''

Change new icon

Upload new

'''

我们再来测试下功能

最后,还有一个功能,就是立即查看已经刚刚上传的文件

我这里创建了一个jpg图像文件

这里需要用到的函数是send_from_directory

我们将上传的代码再次修改一下,变成上传完以后立刻预览

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

UPLOAD_FOLDER=r'E:\flasky\app\upload'

ALLOWED_EXTENSIONS=set(['txt','pdf','png','jpg','jpeg','gif'])

def allowed_file(filename):

return '.' in filenameand filename.rsplit('.',1)[1]in ALLOWED_EXTENSIONS

@main.route('/upload_file',methods= ['GET','POST'])

def upload_file():

if request.method== 'POST':

file = request.files['file']

if file and allowed_file(file.filename):

filename= secure_filename(file.filename)

file.save(os.path.join(UPLOAD_FOLDER,filename))

return redirect(url_for('.uploaded_file',filename=filename))#跳转到预览页面

return '

你上传了不允许的文件类型

'

return '''

Change new icon

Upload new

'''

@main.route('/uploaded_file/')

def uploaded_file(filename):

return send_from_directory(UPLOAD_FOLDER,filename)

我创建了一张t.jpg的图片,里面用文本框写了一句话,也就是下面预览里面看到的

到这里为止,基本的上传和预览功能就实现了,后面还要再和用户头像挂钩,还得再动动脑子。

以上这篇Flask 上传自定义头像的实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/bestallen/article/details/52888876

python代码图片头像_Flask 上传自定义头像的实例详解相关推荐

  1. 升级IOS8游戏上传自定义头像功能失效的问题

    为了支持arm64,之前已经折腾了很久,昨晚打包准备提交苹果审核时,测试那边的同事反馈说游戏上传自定义头像功能不可用了. 游戏上传自定义功能的简介:卡牌游戏最初是<比武招亲>中有一个充VI ...

  2. WordPress怎么使用支持注册用户上传自定义头像功能?

    WordPress怎么使用支持注册用户上传自定义头像功能?认Wordpress支持显示Gravatar头像,但目前由于众所周知的原因,申请Gravatar头像比较困难只能显示默认的古怪头像,对注册用户 ...

  3. linux上连接ftp服务器,linux下lftp连接ftp服务器进行上传与下载的方法详解

    摘要 腾兴网为您分享:linux下lftp连接ftp服务器进行上传与下载的方法详解,中英翻译,中建在线,掌上看家,银行帮等软件知识,以及微信一键转发工具,小学英语冀教版,正是在下表情包,易问电信,万能 ...

  4. android 刷新标题栏,Android 自定义标题栏的实例详解

    Android 自定义标题栏的实例详解 开发 Android APP 经常会用到自定义标题栏,而有多级页面的情况下还需要给自定义标题栏传递数据. 本文要点: 自定义标题填充不完整 自定义标题栏返回按钮 ...

  5. python画椭圆-python opencv圆、椭圆与任意多边形的绘制实例详解

    圆形的绘制 : OpenCV中使用circle(img,center,radius,color,thickness=None,lineType=None,shift=None)函数来绘制圆形 impo ...

  6. Linux如何全盘搜索MySQL文件_Linux上的文件搜索命令实例详解

    locate 基础了解 locate命令搜索的后台数据库路径:/var/lib/mlocate/mlocate.db ls -hl /var/lib/mlocate total 1.2M -rw-r- ...

  7. python sftp_Python使用sftp实现上传和下载功能(实例代码)

    在Python中可以使用paramiko模块中的sftp登陆远程主机,实现上传和下载功能. 1.功能实现 根据输入参数判断是文件还是目录,进行上传和下载 本地参数local需要与远程参数remote类 ...

  8. jcrop php 头像裁剪,上传裁剪头像(Jcrop)

    上传裁剪头像(Jcrop) -- by Stephen 2016/1/24 20:17:21 总体思路:用户点击选择头像按钮,选好图片后jcrop所在的div以遮罩层的形式显示,此时异步更新图片的sr ...

  9. php 显示要上传的图片格式,php判断文件上传图片格式的实例详解

    php判断文件上传图片格式的实例详解 判断文件图片类型, $type = $_FILES['image']['tmp_name'];//文件名 //$type = $this->getImage ...

最新文章

  1. 灰度图像--图像增强 平滑之均值滤波、高斯滤波
  2. 华为Android9.0谷歌框架,华为Mate9怎样登陆谷歌商店 Mate9如何安装谷歌服务框架【详解】...
  3. 黄聪:C#代码生成工具:文本模板初体验 Hello,World!
  4. 一文弄懂各大池化Pooling操作
  5. php使mysql显示错误_如何针对依赖用户输入的长查询在PHP中显示MySQL错误?
  6. Caused by: android.os.NetworkOnMainThreadException错误解决办法
  7. Windows 中自定义Error Codes
  8. Visual Studio IDE下载地址
  9. Makefile知识点总结:
  10. [转载] Python数据分析与可视化学习笔记(一)数据分析与可视化概述
  11. java标签不显示文字_此程序在运行后,窗体上不显示标签的文字,也不显示图标,我自己检查也没发现什么问题,请大神帮帮忙看看我哪个地方有问题?...
  12. ansible自动化运维必备工具详解
  13. Qt编写自定义控件属性设计器
  14. 蓝色妖姬T3300摄像头有驱动无法显示画面解决方案
  15. 电信光猫 远程服务器,如何禁止电信远程控制服务器修改光猫配置信息
  16. Android动画插入器
  17. java获取https网页代码_java抓取Https协议url地址的源码的方法
  18. “刘畊宏女孩”掀起居家云健身热潮,海外健身市场引流变现新方向?
  19. 《计算广告》学习笔记(四)
  20. 读懂千行百业,萤石物联云平台全新能力发布

热门文章

  1. java jsp中的日历表,JSP中的日历选择(二)
  2. Java实现微信小程序登录注册:获取OpenId和手机号
  3. ubuntu下安装php memcache扩展
  4. 突破8140亿美元的加密货币市场, 2019年将走向何方?
  5. 学习5 游戏中的人工智能(迷宫寻宝)
  6. 外星人入侵游戏python学习_外星人入侵:使用Python开发游戏
  7. 20考研规划及寒假复习小建议
  8. 织梦安装百度编辑器UEditor
  9. 15BGP非等价负载均衡
  10. 美赛真题和优秀论文(2019-2021)