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 ...
随机推荐
- 清除Pycharm设置的方法
Mac 按需运行下面的 rm 删除命令 # Configuration rm -rf ~/Library/Preferences/PyCharm* # Caches rm -rf ~/Library/ ...
- Win10 激活
先看看你的WIN10激活状态:1.右键开始菜单2.运行3.slmgr.vbs -xpr KMS卸载方法:1.如果是KMSPico,则自带服务卸载批处理,2.不管是哪种KMS工具,卸载掉软件之后请执行以 ...
- [django] Deploy Django Applications Using uWSGI and Nginx on Ubuntu 14.04
关键点1:chmod-socket=666 (mysite_uwsgi.ini) 关键点2 : 工程目录和虚拟环境目录搞清楚 几个参考: http://uwsgi-docs.readthedocs.i ...
- Mininet
在Coursera SDN开放课程中,编程作业要用Mininet来完成.这里对Mininet做一个简单的介绍. 什么是Mininet Mininet是由一些虚拟的终端节点(end-hosts).交换机 ...
- Eclipse下配置TinyOS开发环境
通过给Eclipse安装Yeti 2 - TinyOS 2 Plugin for Eclipse来配置TinyOS IDE,从而可建立TinyOS Project Yeti 2的介绍请参考网站:htt ...
- OSGi 系列(六)之服务的使用
OSGi 系列(六)之服务的使用 1. 为什么使用服务 降低服务提供者和服务使用者直接的耦合,这样更容易重用组件 隐藏了服务的实现细节 支持多个服务的实现.这样你可以互换这实现 2. 服务的使用 2. ...
- 2018.09.27 bzoj3029: 守卫者的挑战(概率dp)
传送门 概率dp经典题目. 直接f[i][j][k]f[i][j][k]f[i][j][k]表示当前是第i次挑战,已经胜利了j次,目前的背包剩余空间是k. 然后用前面的转移后面的就行了. 注意第三维可 ...
- Windows 下安装mysql总结
1.配置环境变量 将安装目录添加到系统路径 我的电脑->属性->高级->环境变量->path 2.修改my.ini 位于解压安装目录下 在其中修改或添加配置: [mysqld] ...
- 用原生的javascript 实现一个无限滚动的轮播图
说一下思路:和我上一篇博客中用JQ去写的轮播图有相同点和不同点 相同点: 首先页面布局是一样的 同样是改变.inner盒子的位置去显示不同的图片 不同点: 为了实现无限滚动需要多添加两张重复的图片 左 ...
- 红楼梦3d游戏
1. 红楼梦大观园2d图 2. 红楼梦3d图 潇湘馆 注册机:根据电脑名和时间生成一个id,然后根据注册机生成注册码.