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中operator模块的操作符使用示例总结
Jun 28 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
Feb 07 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
创建pycharm的自定义python模板方法
May 23 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
python区分不同数据类型的方法
Oct 14 Python
python实现的读取网页并分词功能示例
Oct 29 Python
python hash每次调用结果不同的原因
Nov 21 Python
python的reverse函数翻转结果为None的问题
May 11 Python
Python bisect模块原理及常见实例
Jun 17 Python
Python return语句如何实现结果返回调用
Oct 15 Python
Scrapy实现模拟登录的示例代码
Feb 21 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实现的功能是显示8条基色色带
2006/10/09 PHP
解析php中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
php实现微信支付之企业付款
2018/05/30 PHP
jQuery表单验证插件formValidator(改进版)
2012/02/03 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
js实现仿微博滚动显示信息的效果
2015/12/21 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
JS简单获取客户端IP地址的方法【调用搜狐接口】
2016/09/05 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
从零开始搭建vue移动端项目到上线的步骤
2018/10/15 Javascript
搭建基于express框架运行环境的方法步骤
2018/11/15 Javascript
使用webpack搭建vue项目实现脚手架功能
2019/03/15 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
vue 解决provide和inject响应的问题
2020/11/12 Javascript
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
2015/03/19 Python
Python的时间模块datetime详解
2017/04/17 Python
Python学习小技巧之利用字典的默认行为
2017/05/20 Python
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
python 自定义装饰器实例详解
2019/07/20 Python
django+echart数据动态显示的例子
2019/08/12 Python
如何在mac环境中用python处理protobuf
2019/12/25 Python
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
法人代表任命书范本
2014/06/05 职场文书
酒店管理求职信
2014/06/09 职场文书
安全施工责任书
2014/08/25 职场文书
七年级地理教学计划
2015/01/22 职场文书
三行辞职书范文
2015/02/26 职场文书
离婚律师函范本
2015/05/27 职场文书
大国崛起日本观后感
2015/06/02 职场文书
校园音乐节目广播稿
2015/08/19 职场文书
php引用传递
2021/04/01 PHP
详解Java实践之建造者模式
2021/06/18 Java/Android
mybatis中注解与xml配置的对应关系和对比分析
2021/08/04 Java/Android
ConditionalOnProperty配置swagger不生效问题及解决
2022/06/14 Java/Android