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 相关文章推荐
最大K个数问题的Python版解法总结
Jun 16 Python
高效测试用例组织算法pairwise之Python实现方法
Jul 19 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
Oct 14 Python
Python生成器的使用方法和示例代码
Mar 04 Python
python的内存管理和垃圾回收机制详解
May 18 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
Django REST framework 如何实现内置访问频率控制
Jul 23 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
python 计算积分图和haar特征的实例代码
Nov 20 Python
Python编写一个验证码图片数据标注GUI程序附源码
Dec 09 Python
PyTorch 实现L2正则化以及Dropout的操作
May 27 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 AJAX实例根据邮编自动完成地址信息
2008/11/23 PHP
PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明
2011/07/01 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
jQuery图片切换动画效果
2017/02/28 Javascript
JS验证全角与半角及相互转化的介绍
2017/05/18 Javascript
jQuery EasyUI开发技巧总结
2017/09/26 jQuery
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
30分钟快速实现小程序语音识别功能
2018/11/27 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
基于canvasJS在PHP中制作动态图表
2020/05/30 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
javascript实现固定侧边栏
2021/02/09 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[08:17]Ti9 现场cosplay
2019/09/10 DOTA
Python实现list反转实例汇总
2014/11/11 Python
Python中使用第三方库xlrd来读取Excel示例
2015/04/05 Python
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
Python的IDEL增加清屏功能实例
2017/06/19 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
如何基于python3和Vue实现AES数据加密
2020/03/27 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
德国综合购物网站:OTTO
2018/11/13 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
医药工作者的求职信范文
2013/09/21 职场文书
投标邀请书范文
2014/01/31 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
永不妥协观后感
2015/06/10 职场文书
JS实现九宫格拼图游戏
2022/06/28 Javascript