Flask基础(16)-->WTForms表单创建和简单验证
Flask基础(16)-->WTForms表单创建和简单验证
前言:使用Flask_WTF需要配置参数SECRET_KEY
CSRF_ENABLED是为了CSRF(跨站请求伪造)保护。SECRET_KEY用来生成加密令牌,
当CSRF激活的时候,该设置会根据设置的秘钥生成加密令牌。
下一篇我再为大家详细叙述一下CSRF相关内容。
下面是为大家准备的一个示例案例:
- WTForms_test.py(视图页)
- from flask import Flask,render_template,request,flash
- # 导入wtf扩展的表单类
- from flask_wtf import FlaskForm
- # 导入自定义表单需要的字段
- from wtforms import SubmitField,StringField,PasswordField
- # 导入wtf扩展提供的表单验证器
- from wtforms.validators import DataRequired,EqualTo
- app = Flask(__name__)
- app.config["WTF_CSRF_ENABLED"] = False
- app.secret_key = "adfasfssdfdsf"
- # 自定义表单类,文本字段,密码字段,提交按钮
- class RegisterForm(FlaskForm):
- username = StringField("用户名:", validators=[DataRequired("请输入用户名")], render_kw={"placeholder": "请输入用户名"})
- password = PasswordField("密码:", validators=[DataRequired("请输入密码")],render_kw={"placeholder": "请输入密码"})
- password2 = PasswordField("确认密码:", validators=[DataRequired("请输入确认密码"), EqualTo("password", "两次密码不一致")],render_kw={"placeholder": "请确认密码"})
- submit = SubmitField("注册")
- # 定义根路由视图函数,生成表单对象,获取表单数据,进行表单数据验证
- @app.route('/demo1',methods=["get","post"]) # 获取表单的方式get和post都可以
- def demo1():
- register_form = RegisterForm() # 获取表单对象
- # 进行表单验证
- if register_form.validate_on_submit(): # 当submit表单提交时触发验证,那么表单提交成功,即:所有验证都通过触发判断
- # username = request.form.get("username")
- # password = request.form.get("password")
- # password2 = request.form.get("password2")
- # 表单提交验证通过,在此处可以获取表单数据,保存到数据库,从而完成注册
- return "register success" # 返回给客户端注册成功的提示
- else:
- if request.method == "POST": # 表单提交并且表单验证失败
- flash("用户名或者密码错误") # 返回给客户端失败提示
- return render_template("WTForms_test.html",form = register_form) # 将自定义表单数据提交给模板页
- if __name__ == '__main__':
- app.run(debug = True)
- from flask import Flask,render_template,request,flash
- WTForms_test.html(模板页)
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>WTForms_test</title>
- </head>
- <body>
- <form method="post">
- {{ form.username.label }} {{ form.username }}<br/> # 由视图函数获取注册表单对象register_form,然后通过render_template传递到模板,由form接收
- {{ form.password.label }} {{ form.password }}<br/>
- {{ form.password2.label }} {{ form.password2 }}<br/>
- {{ form.submit }}
- </form>
- {% for message in get_flashed_messages() %} # 视图函数中flash闪现过来的是一个消息队列,可以通过遍历get_flashed_messsages()获取
- {{ message }} # 显示flash闪现过来的消息
- {% endfor %}
- </body>
- </html>
- <!DOCTYPE html>
Flask基础(16)-->WTForms表单创建和简单验证的更多相关文章
- flask框架(八)—自定义命令flask-script、多app应用、wtforms表单验证、SQLAIchemy
自定义命令flask-script 用于实现类似于django中 python3 manage.py runserver ...类似的命令,用命令行启动项目 首先安装:pip3 install fla ...
- 测开之路一百四十八:WTForms表单验证
使用WTForms表单验证,可以在数据建模时就设置验证信息和错误提示 创建模型时,设置验证内容,如必填.格式.长度 from flask_wtf import Formfrom wtforms imp ...
- flask 使用Flask-WTF处理表单
使用Flask-WTF处理表单 扩展Flask-WTF继承了WTFforms,使用它可以在flask中更方便的使用WTForms.Flask-WTF将表单数据解析.CSRF保护.文件上传等功能与Fla ...
- bootstrap基础学习【表单含按钮】(二)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 五十二:WTForms表单验证之基本使用
作用:1.做表单验证,把用户提交的数据验证是否合法2.做模板渲染 安装:pip install wtforms 表单验证1.自定义一个表单类,继承wtforms.Form2.定义好需要验证的字段,字段 ...
- 用dedecms自定义表单创建简易自助预约系统
建站往往需要根据客户的需求来增加相应的功能,比如预约.平时用比较多的是织梦系统,那么如何用dedecms自定义表单创建简易自助预约系统呢? 进入dedecms后台,左侧菜单中依次点击“核心” - 频道 ...
- Web开发——HTML基础(HTML表单/下拉列表/多行输入)
参考: 参考:http://www.w3school.com.cn/html/html_forms.asp 目录: 1.<form> 元素 1.1 <input> 元素(输入属 ...
- flask用宏渲染表单模板时,表单提交后,如果form.validate_on_submit()返回的是false的可能原因
flask用宏渲染表单模板时,表单提交后,提交的内容符合DataRequired()校验, 但是form.validate_on_submit()返回的是False, 原因可能是表单模板中的<f ...
- 雷林鹏分享:jQuery EasyUI 表单 - 创建异步提交表单
jQuery EasyUI 表单 - 创建异步提交表单 本教程向您展示如何通过 easyui 提交一个表单(Form).我们创建一个带有 name.email 和 phone 字段的表单.通过使用 e ...
随机推荐
- [目录] ASP.Net Core 搭建微服务网站
本项目采用ASP.Net Core微服务技术,搭建博客和Saas平台. 全文将围绕(1)设计模式 (2)敏捷开发 目的: 结构足够合理,代码足够优美,扩展性.可读性.易维护性做到最优. 以下目录仅为 ...
- spring boot application 配置详情
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
- Hadoop3.1.2 + Hbase2.2.0 设置lzo压缩算法
Hadoop3.1.2 + Hbase2.2.0 设置lzo压缩算法: 写在前面,在配置hbase使用lzo算法时,在网上搜了很多文章,一般都是比较老的文章,一是版本低,二是一般都是使用hadoop- ...
- CodeForces 715B Complete The Graph 特殊的dijkstra
Complete The Graph 题解: 比较特殊的dij的题目. dis[x][y] 代表的是用了x条特殊边, y点的距离是多少. 然后我们通过dij更新dis数组. 然后在跑的时候,把特殊边都 ...
- 告别组件之教你使用原生js和css写移动端轮播图
在工作中由于项目需要要写一个轮播图,本想使用组件直接调用实现快速开发,但是一想到自己经常使用组件但是让自己手写的话确实一点都不会. 一个不会手写组件的前端程序员不是一个好程序员!于是打算自己手写一个. ...
- zabbix监控进程和端口存活脚本
自定义脚本监控端口和进程,脚本process_port_check.sh 内容: [root@mysql02 data]# cat test.sh #!/bin/bash ############## ...
- 实验吧CTF练习题---安全杂项---异性相吸解析
---恢复内容开始--- 实验吧安全杂项之异性相吸 地址:http://www.shiyanbar.com/ctf/1855 flag值:nctf{xor_xor_xor_biubiubiu} ...
- golang时间转换
1.datetime转换成时间字符串 package main import ( "fmt" "reflect" "time" ) func ...
- Net基础篇_学习笔记_第九天_数组_冒泡排序(面试常见题目)
冒泡排序: 将一个数组中的元素按照从大到小或从小到大的顺序进行排列. for循环的嵌套---专项课题 int[] nums={9,8,7,6,5,4,3,2,1,0}; 0 1 2 3 4 5 6 7 ...
- Servlet控制台输出乱码问题
在如下图的配置页面: 在此行添加编码格式: