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 错误和异常小结
Oct 09 Python
python中常用检测字符串相关函数汇总
Apr 15 Python
python安装模块如何通过setup.py安装(超简单)
May 05 Python
windows下安装Python虚拟环境virtualenvwrapper-win
Jun 14 Python
Python环境Pillow( PIL )图像处理工具使用解析
Sep 12 Python
使用Python实现画一个中国地图
Nov 23 Python
Python插入Elasticsearch操作方法解析
Jan 19 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 Python
Python爬虫爬取百度搜索内容代码实例
Jun 05 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 Python
python unittest单元测试的步骤分析
Aug 02 Python
分享Python异步爬取知乎热榜
Apr 12 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&amp;mysql(一)
2006/10/09 PHP
php设计模式 Observer(观察者模式)
2011/06/26 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
php显示指定目录下子目录的方法
2015/03/20 PHP
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
JS实现Enter键跳转及控件获得焦点
2013/08/12 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
JS+CSS实现的日本门户网站经典选项卡导航效果
2015/09/27 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
2016/10/28 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
一篇文章带你搞懂Vue虚拟Dom与diff算法
2020/08/25 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
[56:13]DOTA2-DPC中国联赛定级赛 LBZS vs Phoenix BO3第一场 1月10日
2021/03/11 DOTA
Python探索之自定义实现线程池
2017/10/27 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
Python学习笔记之变量、自定义函数用法示例
2019/05/28 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
Forever 21美国官网:美国标志性快时尚品牌
2017/02/20 全球购物
有影响力的品牌之家:Our Social Collective
2019/06/08 全球购物
室内设计专业个人的自我评价
2013/12/18 职场文书
营销与策划实训报告
2014/11/05 职场文书
2014年妇委会工作总结
2014/12/10 职场文书
导师对论文的学术评语
2015/01/04 职场文书
优秀英文求职信范文
2015/03/19 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
js不常见操作运算符总结
2021/11/20 Javascript