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

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

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

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

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


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

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

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

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

从最简单的开始

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

import os
from flask import Flask, request, redirect, url_forUPLOAD_FOLDER=r'E:\flasky\app\upload'

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

@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 '<p>success</p>'return '''<!DOCTYPE html><title>Change new icon</title><h1>Upload new </h1><form action = "" method = "post" enctype=multipart/form-data><input type = "file" name = file><input type = "submit" value = Upload></form>'''

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

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

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

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

他的参数就是路径名称

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

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

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

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

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

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

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

于是乎,代码变成了

UPLOAD_FOLDER=r'E:\flasky\app\upload'
ALLOWED_EXTENSIONS=set(['txt','pdf','png','jpg','jpeg','gif'])def allowed_file(filename):return '.' in filename and 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 '<p>success</p>'return '<p> 你上传了不允许的文件类型 </p>'return '''<!DOCTYPE html><title>Change new icon</title><h1>Upload new </h1><form action = "" method = "post" enctype=multipart/form-data><input type = "file" name = file><input type = "submit" value = Upload></form>'''

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

首先第一点,request的files属性

也就是说,files是一个MultiDict的形式,而里面的每个文件,都是一个FileStorage对象

那我们再来看下FileStorage的说明

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

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

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

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

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

比如如官方文档所说的

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

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

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

@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 '<p>success</p>'return '<p> 你上传了不允许的文件类型 </p>'return '''<!DOCTYPE html><title>Change new icon</title><h1>Upload new </h1><form action = "" method = "post" enctype=multipart/form-data><input type = "file" name = file><input type = "submit" value = Upload></form>'''

我们再来测试下功能

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

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

这里需要用到的函数是send_from_directory

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

UPLOAD_FOLDER=r'E:\flasky\app\upload'
ALLOWED_EXTENSIONS=set(['txt','pdf','png','jpg','jpeg','gif'])def allowed_file(filename):return '.' in filename and 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 '<p> 你上传了不允许的文件类型 </p>'return '''<!DOCTYPE html><title>Change new icon</title><h1>Upload new </h1><form action = "" method = "post" enctype=multipart/form-data><input type = "file" name = file><input type = "submit" value = Upload></form>'''@main.route('/uploaded_file/<filename>')
def uploaded_file(filename):return send_from_directory(UPLOAD_FOLDER,filename)

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

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

Flask 上传自定义头像相关推荐

  1. python代码图片头像_Flask 上传自定义头像的实例详解

    Flask Web 开发这本书基本上做完了,后面还需要温习,但是自己做的博客总觉得简陋了点,所以,在动脑子开发新功能 今天想到最基本的功能,自定义头像 那这样的功能,设计到2大基本功能块 1:如何进行 ...

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

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

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

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

  4. Unity 上传自定义头像

    使用NativeGallery插件 using System.Collections; using System.Collections.Generic; using UnityEngine; usi ...

  5. flask 上传头像

    上传头像,自己感觉了好久,就是上传文件呗其实,存在一个路径,数据库存储这个路径,然后展示给前端,啥都不说,看怎么实现的. 数据库设置如下 user_image=db.Column(db.String( ...

  6. python flask上传文件_Python之利用Flask上传文件、Flask_RESTful

    Flask上传文件 回顾知识点form表单中,一旦涉及到上传文件就要就必须要有enctype属性,而且必须等于multipart/form-data.而且提交方式为'post',method = 'p ...

  7. 2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程——使用theos tweak 注入hook修改游戏执行代码上传动态头像

    2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程--使用theos tweak 注入hook修改游戏执行代码上传动态头像 开篇 需求&最终效果 环境要求与即将使用的 ...

  8. 【探花交友】保存用户信息、上传用户头像、用户信息管理

    文章目录 1.3.保存用户信息 1.4.上传用户头像 2.用户信息管理 2.1.查询用户资料 2.2.更新用户资料 1.3.保存用户信息 1.3.1.接口文档 YAPI接口地址:http://192. ...

  9. iOS应用上传个人头像

    上传个人头像,可以说每个app都会有此功能,可以从相册里面选择图片,也可以从摄像头获取图片.废话不多说,直接上代码,仅供参考!以后可以考虑把我的工具类贴出来,等我把他完善些再说吧! #pragma m ...

最新文章

  1. 图灵奖大佬Hinton团队CV新作:用语言建模做目标检测,性能媲美DETR
  2. 魔兽世界美服部落人数最多服务器,魔兽世界全球服务器最新人口普查,其实并没有你想象的那么少...
  3. HDU 2818 Building Block
  4. Linux 命令之 head -- 在屏幕上显示指定文件的开头若干行/显示文件开头内容/查看文件开头内容
  5. HTML中scr是图片的什么,HTML中关于url、scr、href的区别
  6. html中的瀑布流是什么
  7. python 爬虫 scrapy1_官网教程
  8. 从Spark-Shell到SparkContext的函数调用路径过程分析(源码)
  9. 《如何搭建小微企业风控模型》第二节 建模所需知识
  10. opengl笔记——OpenGL好资料备忘
  11. lomboz eclipse介绍
  12. topaz滤镜 V1.31中文版
  13. 如何在Hexo中对文章md文件分类
  14. 计算机专业保研英语自我介绍,计算机保研面试英文自我介绍.doc
  15. 解决:HotSeat短信图标提醒有误
  16. PHP小马免杀的浅谈[过最新D盾]
  17. Unity动态(在代码中)更改Shader的相关属性(如颜色、Smoothness、材质……)
  18. C/C++加减乘除运算效率分析
  19. Swift 基础 枚举详解(代码)
  20. Android 开源项目及网址

热门文章

  1. java 挡泥板_VIN原厂配置查询
  2. php台阶走两步余一步,【原创BG】嗨,那条龙 CP:阿莱克丝X大王
  3. 实现你的kalman
  4. matlab三相短路电流计算程序_电力系统三相短路计算的MATLAB代码.doc
  5. Excel工作表保护,怎么撤销保护
  6. linux对电子信息工程专业的意义,谈谈我眼中的电子信息工程
  7. Java 源文件分析
  8. Netty框架之编解码机制一(ByteBuf以及Tcp粘包拆包)
  9. 基于51和Protues仿真的82C55A 软件模拟读写时序
  10. 数据结构和算法思维导图