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检测QQ在线状态的方法
May 09 Python
Pycharm学习教程(2) 代码风格
May 02 Python
Python实现图片滑动式验证识别方法
Nov 09 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
python版本的仿windows计划任务工具
Apr 30 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
Jan 30 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
使用Python进行中文繁简转换的实现代码
Oct 18 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
Python eval函数原理及用法解析
Nov 14 Python
Pytest测试框架基本使用方法详解
Nov 25 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 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
php中static和const关键字用法分析
2016/12/07 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
PHP实现一个限制实例化次数的类示例
2019/09/16 PHP
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
JS 实现导航栏悬停效果(续2)
2013/09/24 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
js的回调函数详解
2015/01/05 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
利用js实现禁止复制文本信息
2015/06/03 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
AngularJs expression详解及简单示例
2016/09/01 Javascript
JS插件plupload.js实现多图上传并显示进度条
2016/11/29 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
当vue路由变化时,改变导航栏的样式方法
2018/08/22 Javascript
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
Python堆排序原理与实现方法详解
2018/05/11 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
Python中的四种交换数值的方法解析
2019/11/18 Python
TensorFlow实现模型断点训练,checkpoint模型载入方式
2020/05/26 Python
使用CSS3来制作消息提醒框
2015/07/12 HTML / CSS
详解使用postMessage解决iframe跨域通信问题
2019/11/01 HTML / CSS
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
金融专业个人求职信
2013/09/22 职场文书
工作保证书范文
2014/04/29 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书
用Python将库打包发布到pypi
2021/04/13 Python
MySQL插入数据与查询数据
2022/03/25 MySQL
Python用any()函数检查字符串中的字母以及如何使用all()函数
2022/04/14 Python