我的第三十五篇博客---flask-wtf表单验证

在Flask中,为了处理web表单,我们可以使用Flask-WTF扩展,它封装了WTForms,并且它有验证表单数据的功能
WTForms支持的HTML标准字段

字段对象 说明
StringField 文本字段
TextAreaField 多行文本字段
PasswordField 密码文本字段
HiddenField 隐藏文件字段
DateField 文本字段,值为datetime.date文本格式
DateTimeField 文本字段,值为datetime.datetime文本格式
IntegerField 文本字段,值为整数
DecimalField 文本字段,值为浮点数
BooleanField 复选框,值为True和False
RadioField 一组单选框
SelectField 下拉列表
SelectMutipleField 下拉列表
FileField 文件上传字段
SubmitField 表单提交按钮
FormField 把表单作为字段嵌入另一个表单
FieldList 一组指定类型的字段

WTForms常用验证函数
验证函数 说明
DataRequired 确保字段中有数据
EqualTo 比较两个字段的值,常用于比较两次密码输入 ,里面的参数是你要验证的表单框名,不是值, 表单框名要加引号
Length 验证输入的值在数字范围内
URL 验证URL
AnyOf 验证输入值在可选列表中
NoneOf 验证输入值不在可选列表中
使用Flask-WTF需要配置参数SECRET_KEY
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。SECRET_KEY用来生成加密令牌,当CSRF激活的时候,该设置会根据设置的密钥生成加密令牌,在HTML页面中直接写form表单

即在html页面<form>表单里写
{{reg.csrf_token()}} reg是你传过来的表单数据

宏:

{% macro input(label=‘‘,type=‘‘,name=‘‘,value=‘‘)%}
{{ label }}<input type="{{ type }}" name="{{ name }}" value="{{ value }}"><br>
{% endmacro %}
{{ m }}<br>
参数值为:{{ params }}<br>
是否都有值:{{ if_all }}<br>
<form method="post">
{{ input(label=‘用户名:‘,type=‘text‘,name=‘username‘) }}
{{ input(label=‘密码:‘,type=‘password‘,name=‘password‘) }}
{{ input(label=‘确认密码:‘,type=‘password‘,name=‘password2‘) }}
{{ input(type=‘submit‘,value=‘登录‘) }}
</form>

实例代码:

py文件

from flask import Flask,render_template,request,flash
# 导入验证层
from flask_wtf import FlaskForm
# 导入需要的字段的包
from wtforms import StringField,PasswordField
# 导入验证字段的包
from wtforms.validators import DataRequired,EqualTo
app = Flask(__name__)
app.config[‘SECRET_KEY‘] = "asdfdcs"
# 继承验证类就能使用验证类的很多方法 对传递过来的字段进行验证
class RegisterForm(FlaskForm):
username = StringField(‘用户名‘,validators=[DataRequired(message=‘用户名不能为空‘)]) # 通过StringField生成字符串,再通过validators参数传递多个验证规则,列表类型
password = PasswordField(‘密码‘,validators=[DataRequired(message=‘密码不能为空‘)])
password2 = PasswordField(‘确认密码‘,validators=[DataRequired(message=‘确认密码不能为空‘),EqualTo(‘password‘,message=‘两次密码不一样‘)]) #!!!!!!!!!password要加引号,是根据表单名判断的

@app.route(‘/‘,methods=[‘POST‘,‘GET‘])
def reg():
register_form = RegisterForm()
if request.method==‘POST‘:
if register_form.validate_on_submit():
flash("注册成功")
else:
flash("注册失败")
return render_template(‘7.html‘,register_form = register_form)

if __name__ == ‘__main__‘:
app.run(debug=True)

html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post">
{{ reg.csrf_token() }} #让网页可以加载表单
{{ reg.username.label }}{{ reg.username }}<br>
{{ reg.password.label }}{{ reg.password }}<br>
{{ reg.password2.label }}{{ reg.password2 }}<br>
{{ reg.submit }}
</form>
{% for message in get_flashed_messages() %} #这是个函数 后面要加括号
<span style="color: cornflowerblue">{{ message }}</span>
{% endfor %}
<br>
{% for value in reg.errors.values() %} #如果表框里输入的内容不符合规则 则会闪现出错误
{{ value[0] }}
{% endfor %}

</body>
</html>

原文地址:https://www.cnblogs.com/sll-csdn/p/10926179.html

时间: 2024-11-05 23:25:48

我的第三十五篇博客---flask-wtf表单验证的相关文章

我的第三十二篇博客---mongo和python结合

交互再用管道 或者$ 的时候 要加引号括住ret=collection.find({'$or':[{'age':{'$gt':20}},{'age':{'$lt':17}}]})ret=collection.aggregate([{"$group":{'_id':'$age'}}]) from pymongo import MongoClientclient=MongoClient(host='localhost',port=27017)collection=client['test'

《flask web开发》第11章 博客文章发布表单无法显示的解决方案

有不少同学在这一章都发现自己明明按照书上一步步执行,但却在首页看不到博客文章发布表单.这个问题其实很好解决. 首先,下载一个DB Browser for SQLite.Ubuntu用户可以在终端输入以下命令: sudo apt-get install sqlitebrowser 之后用这个数据库浏览器打开flasky里的数据库,在role表中按书中第9章所述,将所有角色手工录入,并在user表中给自己的账户添加上role_id字段,这样就大功告成了! 参考: https://www.zhihu.

Java学习总计(二十六)——JavaScript正则表达式,Js表单验证,原生js+css页面时钟

一.JavaScript正则表达式1.exec检索字符串中指定的值,返回找到的值,并确定其位置2.test检索字符串中指定的值,返回true或false3.正则表达式对象的创建:(1)方式一:Var rgex=new RegExp("[0-9]","模式");(2)方式二:简便写法,用双斜杠//把正则表达式的内容括起来例1(正则创建,使用test()方法): <!DOCTYPE html> <html> <head> <me

javaEE 第五篇博客----Applets &amp; Ajax

一 Applet Applet是采用Java编程语言编写的小应用程序,该程序可以包含在 HTML(标准通用标记语言的一个应用)页中,与在页中包含图像的方式大致相同. 含有Applet的网页的HTML文件代码中部带有<applet> 和</applet>这样一对标记,当支持Java的网络浏览器遇到这对标记时,就将下载相应的小应用 程序代码并在本地计算机上执行该Applet. 1 工作原理 Java Applet 可以大大提高Web页面的交互能力和动态执行能力.包含Applet的网页被

我的第十九篇博客---JavaScript基本操作

通过条件来控制程序的走向,就需要用到条件语句条件运算符:==, ===, >, >=, <, <=, !=, &&(而且), ||(或者), !(否) if elsevar iNum01=3;var iNum02=5;var sTr;if (iNum01>iNum02){ sTr='大于';}else{ sTr='小于';}alert(sTr); 多重 if else 语句var iNow=1;if(iNow==1){ ...;}else if (iNow==

mysql 第三十五篇文章~xtarbackup增量备份以及策略

一 简介: 今天咱们来探讨下增量备份的策略 二 背景: 随着数据量的日益增长,全备已经不现实了,所以探讨并测试了增量备份策略 三 具体策略: 1  一周为界限,一天做全备,其他时间以全备为基础进行增量备份 2  一周为界限,进行打包,然后上传到备份服务器 四 具体脚本: 第一部分 参数变量初始化 #!/bin/bash #config xingqi=`date +%w` DATE=`date +%Y%m%d%H` DATEyst=`date +"%Y%m%d%H" -d "-

第三十五篇-AppBarLayout的使用

效果图: 添加appbarlayout到xml文件中,然后在toolbar下面添加一个imageview并设置居中放置,我放置的是上面那个安卓的图标. 根据之前学过的toolbar那一节,结合viewpaper和toolbar设置三个页面,这时,运行程序,可能发现那三个页面并没有显示出来,NetedScollView这是个可滚动的页面,单击它,在右侧勾选fillViewport.在运行程序就可以显示页面了. page1 page2 page3 附上代码 main.java package com

第三十五篇 os模块、sys模块、json模块、pickle模块

目录 一.os模块 二.sys模块 三.json模块 dump和load 四.pickle模块 一.os模块 os模块和操作系统交互,主要用于文件操作 import os # test.py文件中 # os.mkdir() 一个路径参数和一个字符串参数.如果有路径参数,则在该路径下创建一个新的文件夹:如果无路径参数,则在当前文件的同级路径下创建一个新的文件夹 os.mkdir('king') # 创建了和test.py文件同级目录下的名为king的文件夹 # os.removedirs() 一个

小刘同学的第一百三十五篇日记

今天大致把论文改完了. 还剩一章的内容,明早大概2个小时就能改完整片论文了. 今天收到录用通知了-- 感觉很殇--可能要去小县城上班去了. 而且也不是做技术-- 不知道后面的路会怎么样, 牢记使命,不忘初心吧( ̄▽ ̄)~* 大家早安~ morning~ 原文地址:https://www.cnblogs.com/xiaoliutongxue/p/9022457.html