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实现多行注释的另类方法
Aug 22 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
python爬虫正则表达式之处理换行符
Jun 08 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
python制作mysql数据迁移脚本
Jan 01 Python
Python3数字求和的实例
Feb 19 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
python安装requests库的实例代码
Jun 25 Python
Python求均值,方差,标准差的实例
Jun 29 Python
python @classmethod 的使用场合详解
Aug 23 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
Jan 05 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个人网站架设连环讲(四)
2006/10/09 PHP
php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
2010/05/16 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
PHP程序中使用adodb连接不同数据库的代码实例
2015/12/19 PHP
各种快递查询--Api接口
2016/04/26 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
js form action动态修改方法
2008/11/04 Javascript
JavaScript中的Array对象使用说明
2011/01/17 Javascript
javascript动画浅析
2012/08/30 Javascript
javascript实现iframe框架延时加载的方法
2014/10/30 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
Angularjs手动解析表达式($parse)
2016/10/12 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
2016/12/13 Javascript
ES6入门教程之Class和Module详解
2017/05/17 Javascript
小程序指纹验证的实现代码
2018/12/04 Javascript
最全vue的vue-amap使用高德地图插件画多边形范围的示例代码
2020/07/17 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
从零学Python之引用和类属性的初步理解
2014/05/15 Python
Python实现的彩票机选器实例
2015/06/17 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
英国日常交易网站:Wowcher
2018/09/04 全球购物
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
新闻专业大学生找工作的自我评价
2013/10/30 职场文书
一名毕业生的自我鉴定
2013/12/04 职场文书
信息技术专业个人自我评价
2013/12/11 职场文书
现场施工员岗位职责
2014/03/10 职场文书
平安工地汇报材料
2014/08/19 职场文书
基层党组织整改方案
2014/10/25 职场文书