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连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 Python
Python写的一个简单监控系统
Jun 19 Python
遍历python字典几种方法总结(推荐)
Sep 11 Python
python爬取NUS-WIDE数据库图片
Oct 05 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
Python简单删除列表中相同元素的方法示例
Jun 12 Python
Python2和Python3中print的用法示例总结
Oct 25 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
Nov 14 Python
删除python pandas.DataFrame 的多重index实例
Jun 08 Python
pygame游戏之旅 如何制作游戏障碍
Nov 20 Python
Python 元组操作总结
Sep 18 Python
Django drf请求模块源码解析
Jun 08 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 多个变量指向同一个引用($b = &amp;$a)用法分析
2019/11/13 PHP
google jQuery 引用文件,jQuery 引用地址集合(jquery 1.2.6至jquery1.5.2)
2011/04/24 Javascript
能说明你的Javascript技术很烂的五个原因分析
2011/10/28 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
2014/01/31 Javascript
JavaScript中双叹号!!作用示例介绍
2014/09/21 Javascript
JavaScript中常用的六种互动方法示例
2015/03/13 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
node.js学习之交互式解释器REPL详解
2016/12/08 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
基于node.js实现爬虫的讲解
2019/02/18 Javascript
用Python脚本生成Android SALT扰码的方法
2013/09/18 Python
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
使用Python实现下载网易云音乐的高清MV
2015/03/16 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
在PyCharm中批量查找及替换的方法
2019/01/20 Python
python+pyqt5实现KFC点餐收银系统
2019/01/24 Python
python函数的万能参数传参详解
2019/07/26 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
Nike比利时官网:Nike.com (BE)
2019/02/07 全球购物
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
金融专业个人求职信
2013/09/22 职场文书
新闻专业毕业生英文求职信
2014/03/19 职场文书
离婚协议书范文2015
2015/01/26 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
横空出世观后感
2015/06/09 职场文书
2016年社区“我们的节日·中秋节”活动总结
2016/04/05 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python
简单聊聊Golang中defer预计算参数
2022/03/25 Golang