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 ...
随机推荐
- 干Java这一行,应该怎样提升自己?
前段时间,字节跳动在阿里巴巴的大本营杭州悄悄的建立一个研发中心,最近在疯狂招人. 相信最近一段时间,杭州的很多的互联网公司的开发人员都接到过猎头的电话.据了解,字节跳动杭州研发中心主要负责字节跳动新增 ...
- HTTP 协议类
HTTP 协议的主要特点 简单快速:每个资源的URL是固定的 灵活:在每个 http 协议中都有一个头部分有一个数据类型,通过一个 http 协议就可以完成不同数据类型的传输 无连接:连接一次就好断掉 ...
- Python实现加密的ZIP文件解压(密码已知)
博主在上篇博文介绍了<Python实现加密的RAR文件解压(密码已知)>后,又尝试了ZIP文件的解压方法,下面开始分享. 当ZIP文件的压缩密码已知时,可以通过调用zipfile库进行解压 ...
- 预科班D2
2020.09.08星期二 预科班D2 学习内容: 一.复习 1.平台: 平台=操作系统+计算机硬件 2.跨平台性 3.文件 文件是指操作系统提供给上层使用者操作硬盘的一种功能.
- C#开发PACS医学影像处理系统(十七):2D处理之影像旋转和翻转
1.任意角度旋转 在XAML设计器中,设置RotateTransform属性 <InkCanvas x:Name="ToolInkCanvas" UseCustomCurso ...
- TB级倾斜模型加载速度太慢?这是我见过最快的加载方式没有之一
随着无人机性能快速提升,单个项目涉及到的倾斜摄影模型数据范围.数据量及单个模型体积也在不断变大,带来的问题是数据显示速度却越来越慢,那么如何在不升级配置的情况下提升模型的加载速度呢? TB级倾斜摄 ...
- python-面向过程面向对象和栈的实现
0x01 大纲 面向过程 函数 参数传递 返回 面向对象 类 栈的数据结构实现 0x02 例子 def add(a,b): return a+b if __name__ == '__main__': ...
- SpringBoot-03-配置之yaml语法学习
3. SpringBoot配置 3.1 yaml语法学习 配置文件 Springboot使用一个全局的配置文件,配置文件名称固定 spplication.properties 语法结构:key=val ...
- Java Web学习(六)HttpServletRequest(客户端请求)
一.定义 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有 ...
- svn的使用学习
一:安装 1.svn安装包,语言包下载 地址:https://pan.baidu.com/s/1PFM7ya_hNJM-v979KgCpgA 提取码:mpxq 2.运行下载的TortoiseSVN程序 ...