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
Python基于动态规划算法解决01背包问题实例
Dec 06 Python
python 实时得到cpu和内存的使用情况方法
Jun 11 Python
python实现时间o(1)的最小栈的实例代码
Jul 23 Python
详解python读取和输出到txt
Mar 29 Python
Python实现的银行系统模拟程序完整案例
Apr 12 Python
python命名空间(namespace)简单介绍
Aug 10 Python
python程序 线程队列queue使用方法解析
Sep 23 Python
python读写Excel表格的实例代码(简单实用)
Dec 19 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
django 模版关闭转义方式
May 14 Python
Python实现自动签到脚本的示例代码
Aug 19 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
zend framework多模块多布局配置
2011/02/26 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
Symfony2之session与cookie用法小结
2016/03/18 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
Prototype源码浅析 String部分(三)之HTML字符串处理
2012/01/15 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
JS简单计算器实例
2015/01/20 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
基于React.js实现原生js拖拽效果引发的思考
2016/03/30 Javascript
微信小程序 条件渲染详解
2016/10/09 Javascript
Ztree新增角色和编辑角色回显问题的解决
2016/10/25 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
Vue 实现拖动滑块验证功能(只有css+js没有后台验证步骤)
2018/08/24 Javascript
微信小程序页面传多个参数跳转页面的实现方法
2019/05/17 Javascript
React精髓!一篇全概括小结(急速)
2019/05/23 Javascript
vue在路由中验证token是否存在的简单实现
2019/11/11 Javascript
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
django之常用命令详解
2016/06/30 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
html5教你做炫酷的碎片式图片切换 (canvas)
2017/07/28 HTML / CSS
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
软件测试工程师笔试题带答案
2015/03/27 面试题
简历中自我评价分享
2013/10/09 职场文书
社团2014年植树节活动总结
2014/03/11 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
vue实现简单数据双向绑定
2021/04/28 Vue.js
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
2021/10/16 Python