Flask的WTforms
一、简单介绍
WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证。
类似于Django中的modelform
安装:
pip3 install wtforms
二、简单使用
后端代码app.py
from flask import Flask, request, render_template, session
from flask_session import Session
from redis import Redis
from wtforms import Form, validators, widgets
from wtforms.fields import simple, core app = Flask(__name__)
app.config["DEBUG"] = True
# 用原生的session要设置SECRET_KEY
# app.config["SECRET_KEY"] = 'uihuiwuiwoiw' # 使用redis session
app.config["SESSION_TYPE"] = "redis"
# 实例化redis
app.config["SESSION_REDIS"] = Redis(host="127.0.0.1", port=6379) # redis 不要放在公网 # 设置存在客户端的cookies中的session的名字
# app.config["SESSION_COOKIE_NAME"] = "#¥%……&*(#E$RTY$%RTY%^Y&U%^&*" # 用第三方session替换原生的session;这是基于原生的session的
Session(app) class LoginForm(Form):
username = simple.StringField(
label="用户名",
validators=[
validators.DataRequired(message="用户名不能为空"),
validators.Length(min=4, max=8, message="用户名必须大于等于4,小于等于8")
]
)
password = simple.PasswordField(
label="密码",
validators=[
validators.DataRequired(message="密码不能为空"),
validators.Length(min=4, max=8, message="密码必须大于等于4,小于等于8")
]) @app.route('/login',methods=['GET','POST'])
def login():
login_form = LoginForm()
if request.method == "GET":
return render_template('login.html', lf=login_form)
else:
login_form_data = LoginForm(request.form)
if login_form_data.validate():
session['user'] = login_form_data.data.get('username')
return str(session["user"])
else:
return render_template("login.html", lf=login_form_data) class RegForm(Form):
username = simple.StringField(
label="用户名",
validators=[
validators.DataRequired(message="用户名不能为空"),
]
)
password = simple.PasswordField(
label="密码",
validators=[
validators.DataRequired(message="密码不能为空"),
validators.Length(min=6, max=16, message="密码必须大于等于6,小于等于16")
])
repassword = simple.PasswordField(
label="确认密码",
validators=[
validators.EqualTo("password", message="两次密码不一致")
]
)
gender = core.SelectField(
label="性别",
choices=(
(1, "女"),
(2, "男")
),
default=1,
# widget=widgets.RadioInput(),
# render_kw={"class": "my_class"},
coerce=int
)
email = simple.StringField(
label="邮箱",
validators=[
validators.DataRequired(message="邮箱不能为空"),
validators.Email(message="不符合规定")
]
)
hobby = core.SelectMultipleField(
label="癖好",
choices=(
(1, "萝莉"),
(2, "御姐"),
(3, "小哥哥"),
(4, "正太")
),
# widget=widgets.,
coerce=int,
default=(1, 4)
) @app.route('/reg', methods=['GET', 'POST'])
def reg():
if request.method == "GET":
rf = RegForm()
return render_template("reg.html", rf=rf)
else:
rf_data = RegForm(request.form)
if rf_data.validate():
print(rf_data.data.get("hobby"))
print(type(rf_data.data.get("gender")))
return "注册成功"
else:
return render_template("reg.html", rf=rf_data) if __name__ == '__main__':
app.run()
登录模板:login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" novalidate>
<p>{{ lf.username.label }}:{{ lf.username }}{{ lf.username.errors.0 }}</p>
<p>{{ lf.password.label }}:{{ lf.password }}{{ lf.password.errors[0] }}</p>
<input type="submit" value="登录">
</form>
</body>
</html>

模板中也可以直接循环获取模板数据如下的注册页面
注册模板:reg.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style></style>
</head> <body>
<form action="" method="post" novalidate>
{% for field in rf %}
<p>{{ field.label }}{{ field }} <span style="color: red">{{ field.errors.0 }}</span></p>
{% endfor %}
<input type="submit" value="注册"> </form>
</body>
</html>

Flask的WTforms的更多相关文章
- Flask插件wtforms、Flask文件上传和Echarts柱状图
一.wtforms 类比Django的Form组件Form组件的主要应用是帮助我们自动生成HTML代码和做一些表单数据的验证 flask的wtforms用法跟Form组件大同小异参考文章:https: ...
- 85、flask之wtforms
本篇导航: wtforms组件的使用 自定义From组件 一.wtforms组件的使用 1.flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进 ...
- flask之wtforms
本篇导航: wtforms组件的使用 自定义From组件 一.wtforms组件的使用 1.flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进 ...
- Flask之wtforms源码分析
一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._ ...
- 【Flask】WTForms基本使用
# WTForms笔记:这个库一般有两个作用.第一个就是做表单验证,把用户提交上来的数据进行验证是否合法.第二个就是做模版渲染. ### 做表单验证:1. 自定义一个表单类,继承自wtforms.Fo ...
- 11,flask之--WTForms
WTForms是什么? 相当于django的ModelForm. 在网页中,为了和用户进行信息交互总是不得不出现一些表单.flask设计了WTForm表单库来使flask可以更加简便地管理操作表单数据 ...
- flask flask_session,WTForms
一.Flask_session 本质上,就是是cookie 下的session存储在redis中,方便快速取得session from flask import Flask,session from ...
- flask之wtforms 表单验证(一)
一 安装wtforms pip install wtforms 二 导入相关模块及对象 from wtforms import Form, widgets, validators from wtf ...
- 【Flask】WTForms文件上传下载
# 文件上传笔记:1. 在模版中,form表单中,需要指定`encotype='multipart/form-data'`才能上传文件.2. 在后台如果想要获取上传的文件,那么应该使用`request ...
随机推荐
- iOS.Book.Effective Objective-C 2.0
1. 中文翻译版 (更新中) https://github.com/HagerHu/effective-objective-c-2.0 2. Book的主页 和 代码主页 http://www.eff ...
- Debian 利用 iso 镜像完全离线更新 apt-cdrom
1 目的 在日常的 linux 服务器管理中,出于某些考虑,服务器要求与 Internet 完全隔离. 这使得我们对系统的更新和软件包的升级感到无比头疼. 下面介绍的这种方法,采用 ISO 文件,进行 ...
- 4. Configure maven in Spring Tool Suite
First of all, you need to copy the folder named like: Choose Window->Preferences->Maven->Us ...
- "UX"将会是下一个Buzzword?
“用户体验非常重要”.“没有用户体验就没有产品”.“UX就是一切”.不知道从何时开始,用户体验(UX) 这个名词已经变得如此多见了,但是人们真正的认识.认清了什么是用户体验了吗?设计师们常挂在嘴边的用 ...
- Spring AOP配置
相关概念有点拗口,我这里简单总结一个,切面,决定做什么,写处理逻辑,比如打日志.切入点,决定在哪些方里拦截,一般填正则表达式查询. 通知,就是连接切面和切入点的桥梁. 其中遇到了配置好,启动服务器没报 ...
- Directory /usr/local/hadoop/tmp/tmp/hadoop-root/dfs/name is in an inconsistent state: storage directory does not exist or is not accessible
解决方法: <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp< ...
- 关于某一discuz 6.0论坛故障的记录
某日,额突然发现公司的discuz 6.0论坛在IE6浏览器下面显示出现问题: 每个链接都出现了下划线,很难看,不过已访问的链接(a:visted)却没有下划线,于是怀疑css.htm有问题.于是对c ...
- 分组取前N记录
分组取前N记录 经常看到问题,如何取出每组的前N条记录.方便大家参考于是便把常见的几种解法列出于下. 问题:有表 如下,要求取出各班前两名(允许并列第二)Table1+----+------+-- ...
- 2018.07.24 loj#107. 维护全序集(非旋treap)
传送门 就是普通平衡树,可以拿来练非旋treap" role="presentation" style="position: relative;"&g ...
- spring boot web项目在IDEA下热部署解决办法(四步搞定)
最近在用spring boot 做一个web站点,修改了类.html.js等,刷新页面,没有生效,非要手动去make一下或者重启,大大降低了开发效率. 什么是热部署? 应用启动后会把编译好的Class ...