用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验
目录
前文列表
用 Flask 来写个轻博客 (1) — 创建项目
用 Flask 来写个轻博客 (2) — Hello World!
用 Flask 来写个轻博客 (3) — (M)VC_连接 MySQL 和 SQLAlchemy
用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
用 Flask 来写个轻博客 (5) — (M)VC_SQLAlchemy 的 CRUD 详解
用 Flask 来写个轻博客 (6) — (M)VC_models 的关系(one to many)
用 Flask 来写个轻博客 (7) — (M)VC_models 的关系(many to many)
用 Flask 来写个轻博客 (8) — (M)VC_Alembic 管理数据库结构的升级和降级
用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览
用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法
用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数
用 Flask 来写个轻博客 (12) — M(V)C_编写和继承 Jinja 模板
WTForms
WTForms:是一个服务端表单检验库,用于在保证安全的前提下,对常见的表单类型进行输入的合法性验证。除此之外,还提供了 Jinja HTML 渲染、预防跨域请求伪造(CSRF)、SQL 注入。
- 安装
(env) [root@flask-dev JmilkFan-s-Blog]# pip install Flask-WTF
(env) [root@flask-dev JmilkFan-s-Blog]# pip freeze > requirements.txt
- 生成密钥
NOTE 1: WTF 的安全措施的执行需要我们提供一个*安全密钥,用于生成加密的签名,在所有需要验证真实性的所有地方都会用到这个签名。
(env) [root@flask-dev JmilkFan-s-Blog]# cat /dev/urandom | tr -cd 'a-f0-9' | head -c 32
- 将密钥写入配置项
class Config(object):
"""Base config class."""
SECRET_KEY = '你的密钥'
class ProdConfig(Config):
"""Production config class."""
pass
class DevConfig(Config):
"""Development config class."""
DEBUG = True
# MySQL connection
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:fanguiju@127.0.0.1:3306/myblog?charset=utf8'
WTF 的基础使用
WTForms 由 字段、检验器、表单 三部分组成:
字段:表示表单的输入框,会做一些初步的输入检查
检验器:是一组被附加到字段(输入框)上的函数,用于对输入数据的检验,确保输入我们期望的数据
表单:是一个 Python 类,其中包含了 字段(类属性) 和 检验器,在接收到 HTTP POST 请求时,会根据定义的检验器规则来对输入数据进行检验
from flask_wtf import Form
from wtforms import StringField, TextField
from wtforms.validators import DataRequired, Length
class CommentForm(Form):
"""Form vaildator for comment."""
# Set some field(InputBox) for enter the data.
# patam validators: setup list of validators
name = StringField(
'Name',
validators=[DataRequired(), Length(max=255)])
text = TextField(u'Comment', validators=[DataRequired()])
NOTE 1:表单类需要继承 Flask WTF 扩展提供的 Form 类
NOTE 2:表单类中的一个类属性,就代表了一个字段,即输入框。wtforms 提供了多种类型的字段类
NOTE 3:字段类的第一个参数为输入框标题,第二个参数为绑定到该字段的检验器列表,由 wtforms.validators 提供
- 将 wt_forms 模块导入到 main.py 中:
from flask import Flask
from config import DevConfig
import wt_forms
app = Flask(__name__)
# Import the views module
views = __import__('views')
# Get the config from object of DecConfig
app.config.from_object(DevConfig)
if __name__ == '__main__':
app.run()
常用的字段类型
每一种字段类型都对应了一个 Form 组件。
fields.DateField
对应了 Python 中的 Date 对象,可以接收一个 format 可选参数来设定 Date 格式,该参数需要传入一个 strftime(格式化输出时间) 的字符串。
fields.IntegerField
将提交的数据强制转换成为整数,并在模板上渲染成为一个数字类型的输入框。
fields.FloatField
将提交的数据强制转换成为浮点数,并在模板上渲染成为一个数字类型的输入框。
fields.StringField
普通的文本输入框,会将输入的内容强制转换成为 String 类型对象。
fields.RadioField
代表一组单项选择框,接收一个 choices 参数,该参数需要传入一个以 Tuple 为元素的 List 类型对象,这些参数值表示了显示的选项和返回值。
fields.SelectField/fields.SelectMultipleField
代表一组单选/多选框,接收一个 choices 参数,该参数需要传入一个以 Tuple 为元素的 List 类型对象,代表选项的显示内容和返回值。
常用的检验器
WTForms 的检验器
一般能够通过其命名来得知其作用,所有的检验器都能够接收一个 message 参数,该参数表示了输入的数据没有通过验证时,返回的错误信息。
- validators.DataRequired()
- validators.Email()
- validators.Length(min=-1, max=-1)
- validators.NumberRange(min=None, max=None)
- validators.Optional()
- validators.Regexp(regex)
- validators.URL()
自定义检验器
自定义检验器所需要做的事情就是:实现一个函数 接收表单对象和字段对象作为参数 当没有通过验证时,触发一个 wtform.VaildationError 异常 .
import re
from wtforms import ValidationError
def custom_email(form_object, field_object):
"""Define a vaildator"""
if not re.match(r"[^@+@[^@]+\.[^@]]+", field_object.data):
raise ValidationError('Field must be a valid email address.')
用 Flask 来写个轻博客 (13) — M(V)C_WTForms 服务端表单检验的更多相关文章
- 用 Flask 来写个轻博客 (15) — M(V)C_实现博文页面评论表单
目录 目录 前文列表 实现 post 视图函数 在 posthtml 中添加表单 效果 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hell ...
- 用 Flask 来写个轻博客 (14) — M(V)C_实现项目首页的模板
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 实现所需要的视图函数 实现 home.html 模板 代码分析 实现效 ...
- 用 Flask 来写个轻博客 (12) — M(V)C_编写和继承 Jinja 模板
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 扩展阅读 使用 Bootstrap 编写 Jinja 模板文件 继承一 ...
- 用 Flask 来写个轻博客 (11) — M(V)C_创建视图函数
目录 目录 前文列表 视图函数 在 viewspy 文件中定义视图函数 定义右侧边栏的视图函数 为每一张数据表定义视图函数 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask ...
- 用 Flask 来写个轻博客 (10) — M(V)C_Jinja 常用过滤器与 Flask 特殊变量及方法
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 Jinja 中常用的过滤器 default float int len ...
- 用 Flask 来写个轻博客 (9) — M(V)C_Jinja 语法基础快速概览
#目录 前文列表 扩展阅读 Jinja 变量名 注释 控制语句 if 语句 循环 过滤器 无参数调用 带参数调用 宏 定义宏 调用宏 结果 兼容 JavaScript 前文列表 用 Flask 来写个 ...
- 用 Flask 来写个轻博客 (4) — (M)VC_创建数据模型和表
目录 目录 前文列表 扩展阅读 定义数据模型 models 创建表 前文列表 用 Flask 来写个轻博客 (1) - 创建项目 用 Flask 来写个轻博客 (2) - Hello World! 用 ...
- 用 Flask 来写个轻博客
用 Flask 来写个轻博客 用 Flask 来写个轻博客 (1) — 创建项目 用 Flask 来写个轻博客 (2) — Hello World! 用 Flask 来写个轻博客 (3) — (M)V ...
- 用 Flask 来写个轻博客 (37) — 在 Github 上为第一阶段的版本打 Tag
Blog 项目源码:https://github.com/JmilkFan/JmilkFan-s-Blog 目录 目录 前文列表 第一阶段结语 打 Tag 前文列表 用 Flask 来写个轻博客 (1 ...
随机推荐
- Vue2.0---webpack打包知识点-1
打包上线或者将项目做成产品的肯定不希望暴露自己源码 在config的index.js中将productionGzip设置为false即可.(使之不生成.map文件). 对Vue-cli的webpack ...
- 1.Jmeter 快速入门教程(一) - 认识jmeter和google插件
Jmeter是免费开源的性能测试工具( 同时也可以用作功能测试,http协议debug工具 ). 在如今越来越注重知识产权的今天, 公司越来越不愿意冒着巨大的风险去使用盗版的商业性能测试工具. 但如 ...
- C# 几进制 转换到几进制
public string ConvertString(string value, int fromBase, int toBase) { int intValue = Convert.ToInt32 ...
- css怎么解决表格边框线重复问题
<ul> <li><a href="#">1</a></li> <li><a href="# ...
- WPF 的二维绘图(二)——几何图形Geometry
<本文转自同行> 在WPF的DrawingContext对象中,提供了基本的绘制椭圆和矩形的API:DrawEllipse和DrawRectangle.但是,这些是远远不够用的,我们在日常 ...
- oracle创建表空间自增空间管理
表空间(tablespace).段(segment).区(extent).块(block),这些都是oracle数据库在数据文件中组织数据的基本单元 1.创建表空间create tablespace ...
- go语言从例子开始之Example12.func函数
函数 是 Go 的中心.我们将通过一些不同的例子来进行学习. Example: package main import "fmt" //定义一个函数使用关键字func //函数名名 ...
- HDU-3333 Turing Tree 分块求区间不同数和
HDU-3333 Turning Tree 题目大意:先给出n个数字.面对q个询问区间,输出这个区间不同数的和. 题解:这道题有几种解法.这里讲一下用分块解决的方法.( 离线树状数组解法看这里 Hdu ...
- jq的ajax请求更改为axios请求时零碎总结
#老版切新版更改处----ajax 更改为 axios //ajax$.ajax({ type: 'POST', url: url, data: data, success: success, dat ...
- 配置本机的yum源
配置本机的yum源 环境:操作系统CentOS6.5 1.挂在安装光盘 [root@CentOS40 ~]# mkdir -p /mnt/cdrom[root@CentOS40 ~]# mount / ...