flask利用flask-wtf验证上传的文件的方法


Posted in Python onJanuary 17, 2020

利用flask-wtf验证上传的文件

  1. 定义验证表单类的时候,对文件类型的字段,需要采用FileField这个类型,即wtforms.FileField。
  2. 验证器需要从flask_wtf.file中导入。flask_wtf.file.FileRequired和flask_wtf.file.FileAllowed
  3. flask_wtf.file.FileRequired是用来验证文件上传不能为空。
  4. flask_wtf.file.FileAllowed用来验证上传的文件的后缀名, 如常见图片后缀.jpg和.png以及.gif等。
  5. 在视图函数中,需要使用from werkzeug.datastructures import CombinedMultiDict来把request.form与request.files来进行合并。
  6. 最后使用 表单验证对象.validate()进行验证。

upload.html文件:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8"> 
<title>上传文件</title> 
</head> 
<body> 
 <form action="" method="post" enctype="multipart/form-data"> 
 <table> 
 <tr> 
 <td>头像:</td> 
 <td><input type="file" name="pichead"></td> 
 </tr> 
 <tr> 
 <td>描述:</td> 
 <td><input type="text" name="desc"></td> 
 </tr> 
 <tr> 
 <td></td> 
 <td><input type="submit" value="提交"></td> 
 </tr> 
 </table> 
 </form> 
</body> 
</html>

formscheck.py文件:

from wtforms import Form,FileField,StringField 
from wtforms.validators import InputRequired
from flask_wtf.file import FileRequired,FileAllowed 

class UploadForm(Form): 
 pichead = FileField(validators=[FileRequired(),FileAllowed(['jpg','png','gif'])])
 desc = StringField(validators=[InputRequired()])

python启动文件:

from flask import Flask,request,render_template 
import os 
from werkzeug.utils import secure_filename 
from formscheck import UploadForm 
from werkzeug.datastructures import CombinedMultiDict 

app = Flask(__name__) 

UPLOAD_PATH = os.path.join(os.path.dirname(__file__),'images') 

#利用flask-wtf验证上传的文件 
@app.route('/upload/',methods=['GET','POST']) 
def upload(): 
 if request.method == 'GET': 
 return render_template('upload.html') 
 else: 
 form = UploadForm(CombinedMultiDict([request.form,request.files])) 
 if form.validate(): 
  # desc = request.form.get("desc") 
  # pichead = request.files.get("pichead") 
  desc = form.desc.data 
  pichead = form.pichead.data 
  filename = secure_filename(pichead.filename)
  pichead.save(os.path.join(UPLOAD_PATH,filename)) 
  print(desc) 
  return '文件上传成功' 
 else: 
  print(form.errors) 
  return "文件上传失败" 

if __name__ == '__main__': 
 app.run(debug=True)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python常用模块用法分析
Sep 08 Python
分析在Python中何种情况下需要使用断言
Apr 01 Python
python抓取最新博客内容并生成Rss
May 17 Python
Python实现的栈(Stack)
Jan 26 Python
python获取程序执行文件路径的方法(推荐)
Apr 26 Python
python中update的基本使用方法详解
Jul 17 Python
Python csv模块使用方法代码实例
Aug 29 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
JupyterNotebook 输出窗口的显示效果调整实现
Sep 22 Python
如何完美的建立一个python项目
Oct 09 Python
python搜索算法原理及实例讲解
Nov 18 Python
Python with标签使用方法解析
Jan 17 #Python
Python运行DLL文件的方法
Jan 17 #Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 #Python
python如何基于redis实现ip代理池
Jan 17 #Python
解决python gdal投影坐标系转换的问题
Jan 17 #Python
python3 Scrapy爬虫框架ip代理配置的方法
Jan 17 #Python
Python计算机视觉里的IOU计算实例
Jan 17 #Python
You might like
PHP 的 __FILE__ 常量
2007/01/15 PHP
PHP flock 文件锁详细介绍
2012/12/29 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
ThinkPHP框架中使用Memcached缓存数据的方法
2018/03/31 PHP
浅谈Javascript 执行顺序
2013/12/18 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
jquery控制显示服务器生成的图片流
2015/08/04 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
原生js生成图片验证码
2020/10/11 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
python 正则式使用心得
2009/05/07 Python
python命令行参数sys.argv使用示例
2014/01/28 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
深入解析Python中的集合类型操作符
2015/08/19 Python
Python实现ssh批量登录并执行命令
2016/10/25 Python
基于scrapy的redis安装和配置方法
2018/06/13 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python+threading模块对单个接口进行并发测试
2019/06/25 Python
PyCharm-错误-找不到指定文件python.exe的解决方法
2019/07/01 Python
python 计算概率密度、累计分布、逆函数的例子
2020/02/25 Python
python继承threading.Thread实现有返回值的子类实例
2020/05/02 Python
Pycharm中使用git进行合作开发的教程详解
2020/11/17 Python
html+css3实现的登录界面
2020/12/09 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
华为C++笔试题
2014/08/05 面试题
农救科工作职责
2013/11/27 职场文书
房屋租赁意向书
2014/04/01 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
Python列表的索引与切片
2022/04/07 Python