Flask之WTF
Flask-WTF是什么?
是一个关于表单的扩展库,可以自动生成表单的HTML代码和验证提交的表单数据,并且提供跨站请求伪造(Cross-Site Request Forgery)保护的功能,使用非常方便
使用步骤:
1.创建表单类,实例化对象
2.在模板中使用该对象
3.在试图函数中处理表单
定义表单类
从 flask_wtf 进口 FlaskForm
从 wtforms 导入 StringField
从 wtforms.validators 导入 DataRequired class MyForm (FlaskForm ):
name = StringField ('name' , validators = [ DataRequired ()])
添加视图函数
@app.route('/')
def index():
# 创建表单对象
form = NameForm()
# 渲染时分配到模板文件
return render_template('form.html', form=form)
表单渲染
{# 原生渲染 #}
{# 判断是否有错误#}
{% if form.name.errors %}
{{ form.name.errors[0] }}
{% endif %}
<h1>Hello {{ name }}</h1>
<form action="{{ url_for('wtform') }}" method="post" >
# {{form.hidden_tag()}}里面放的也就是csrf_token
{{ form.csrf_token }}
{{ form.name.label() }}{{ form.name(id='xx',class='yyy') }}
{{ form.submit() }}
</form>
{# bootstrap渲染 #}
{% extends 'bootstrap/base.html' %}
{% import 'bootstrap/wtf.html' as wtf %}
{% block content %}
<div class="container">{{ wtf.quick_form(form) }}</div>
{% endblock %}
表单校验
@app.route('/', methods=['GET', 'POST'])
def index():
# 创建表单对象
form = NameForm()
name = None
# 表单校验
if form.validate_on_submit():
# 通过校验,则取出数据
name = form.name.data
form.name.data = ''
# 渲染时分配到模板文件
return render_template('form.html', form=form, name=name)
POST重定向GET解决重复提交的问题 @app.route('/wtform/', methods=['GET','POST'])
def wtform():
form = MyForm()
# 判断form表单中的数据是否通过校验
if form.validate_on_submit():
# 通过校验,则取出数据。
name = form.name.data
last_name = session.get('name') or None
# 判断这次提交的name是否和上次的相等
if last_name and last_name == name:
return '老铁别重复提交了'
else:
# 不是重复提交,设置session
session['name'] = name
return render_template('wtform.html',form=form, name=name)
return render_template('wtform.html', form=form)
常见字段类型
字段类型 说明
StringField 普通文本字段
PasswordField 密码文本字段
SubmitField 提交按钮
HiddenField 隐藏文本字段
TextAreaField 多行文本字段
DateField 文本字段,datetime.date格式
DateTimeField 文本字段,datetime.datetime格式
IntegerField 文本字段,整数类型
FloatField 文本字段,小数类型
BooleanField 复选框,值为True或False
RadioField 单选框
SelectField 下拉列表
FileField 文件上传字段
常见验证器类
验证器 说明
DataRequired 确保字段有值(并且if判断为真)
Email 邮箱地址
IPAddress IPv4的IP地址
Length 规定字符长度
NumberRange 输入数值的范围
EqualTo 验证两个字段的一致性
URL 有效的URL
Regexp 正则验证
自定义字段验证:就是写一个'validate_字段'的函数,如下: class NameForm(FlaskForm):
name = StringField('用户名', validators=[DataRequired()])
submit = SubmitField('提交')
# 自定义字段验证
def validate_name(self, field):
if len(field.data) < 6:
raise ValidationError('用户名长度不能少于6个字符')
Flask之WTF的更多相关文章
- from flask.ext.wtf import Form导入报错
问题来源: 在学习Flask网上教程(PS:中文版教程链接,英文版教程其中代码是对的,运行没错误,我为了看的快一些,所以就直接看的中文版>~<,英文版教程链接)时,使用如下代码: from ...
- ImportError: No module named flask.ext.wtf 解决方法
install pip install flask.ext.wtf
- 自动化运维:网站svn代码上线更新(flask+saltstack)
阶段性总结: 跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结. 1.整体架构: 后台:nginx+uwsgi #nginx提供w ...
- 【Flask】Flask快速玩框架
最近比较忙 快速玩Flask框架,为微博做些准备 part 1 python程序 from flask importFlask, render_template, session, redirect, ...
- Python轻量Web框架Flask使用
http://blog.csdn.net/jacman/article/details/49098819 目录(?)[+] Flask安装 Python开发工具EclipsePyDev准备 Flask ...
- Flask Web Development —— Web表单(上)
Flask-WTF扩展使得处理web表单能获得更愉快的体验.该扩展是一个封装了与框架无关的WTForms包的Flask集成. Flask-WTF和它的依赖集可以通过pip来安装: (venv) $ p ...
- Flask学习记录之Flask-WTF
Flask-wtf时Wtforms库的flask框架扩展,能够方便的处理Web表单 一.定义一个web表单 使用flask-wtf时,每个web表单都由一个继承自flask.ext.wtf.Form的 ...
- flask 后台表单验证模块
我不想直接用flask的wtf模块,太大,功能太多,用不了.但后台也不能不做验证吧,我比较懒,不想一行一行写代码验证,所以就写了一个验证模块,对于小项目也够用了 # encoding=utf-8 # ...
- flask笔记二
web表单 web表单是浏览者和网之间的一个互动平台,完成浏览器和服务器之间的数据交互. 1.用Flask-WTF来处理表单 (1)在根目录下编辑扩展配置--config.py CSRF_ENABLE ...
随机推荐
- ssh工具 (Java)
执行shell命令.下载文件... package com.sunsheen.blockchain.admin.utils; import java.io.BufferedReader; import ...
- 初次使用maven创建web工程发现只有一个idea目录,src,webapp目录都不见了,解决方案
修bug系列2之 初次使用maven创建web项目的src目录不知所踪 窗外下着下雨,屋内的我学着maven,本以为轻轻松松,没想到还是遇到了bug.好了不说了,来看看我是怎么解决的. 在初次使用ma ...
- xUnit测试的顺序执行总结
cmliu 1,演示环境:windows 10企业版+Visual Studio 2019:.NET Core3.1:xUnit 2.4.1:.NET Standard 2.0.3 3,场景描述:前几 ...
- CTF-BugKu-加密
2020.09.12 恕我直言,上午做WeChall那个做自闭了,下午复习一下之前做过的. 做题 第一题 滴答~滴 https://ctf.bugku.com/challenges#滴答~滴 摩斯密码 ...
- 2017年PHP程序员未来路在何方(转)
PHP 从诞生到现在已经有20多年历史,从Web时代兴起到移动互联网退潮,互联网领域各种编程语言和技术层出不穷, Node.js . GO . Python 不断地在挑战 PHP 的地位.这些技术的推 ...
- Java知识点JUC总结
JUC:java.util.concurrent (Java并发编程工具类) 一般面试提问:面向对象和高级语法.Java集合类.Java多线程.JUC 和高并发.Java IO和 NIO 获取多线程的 ...
- Kubernetes调度流程与安全(七)
一.Kubernetes中的调度流程 1,介绍 Scheduler 是 k8s 中的调度器,主要的任务是把定义的 Pod 分配到集群的节点上.Scheduler 是作为一个单独的程序运行的,启动之后会 ...
- 从CSDN博客下载的图片如何无损去水印
如果你想下载别人CSDN博客文章中很好看的图片,但却有水印 想要下载去水印的图片,可以先鼠标右击该图片,选择复制图片地址 https://img-blog.csdnimg.cn/20200916140 ...
- 使用U盘的PE系统安装Windows10操作系统 - 初学者系列 - 学习者系列文章
今天闲来无事,就把windows 10的安装再重写一个文(以前写过一个:安装免费的正版Windows10操作系统 - 初学者系列 - 学习者系列文章 ). 1. 制作一个WinPE的U盘. 相信现 ...
- openstack共享组件——Memcache 缓存系统(4)
云计算openstack共享组件——Memcache 缓存系统(4) 一.缓存系统 一.静态web页面: 1.在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Netw ...