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 ...
随机推荐
- ssh的无密码登录
实现步骤如下: 1 生成一对公钥和私钥 $ ssh-keygen #以上命令等价于 ssh-keygen -t rsa #-t:指定密钥的类型,默认为SSH-2 的rsa类型; 运行上面的命令后,系统 ...
- 关于UI设计的一些工作了解
关于UI设计相信大家在刚接触UI的时候都不太了解,我来说说我在一段学习时间后的了解. UI从工作内容上来说分为3大类,即研究工具,研究人与界面的关系,研究人与之相应. UI设计师的职能一个是图形设 ...
- java Exception in thread "main" java.lang.NoClassDefFoundError: main (wrong name: pm/main)
javac main.java 编译后没有问题 java main 出现下面在问题: Exception in thread "main" java.lang.NoClassDef ...
- 43 We were Born to Nap 我们天生需要午睡
We were Born to Nap 我们天生需要午睡 ①American society is not nap-friendly.In fact, says David Dinged, a sle ...
- 浮点数转byte数组
; float b=34.56745f; float c=0.0; ,,,}; byte* t=fbs; float2Bytes(t,b); unsigned int addrF=(unsigned ...
- QGIS Server Quickstart
http://live.osgeo.org/en/quickstart/qgis_mapserver_quickstart.html
- (连通图 ) Redundant Paths --POJ --3177
链接: http://poj.org/problem?id=3177 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82833#probl ...
- jvm不打印异常栈
生产环境抛异常,但却没有将堆栈信息输出到日志,确认打印日志方法正确logger.error("somthing error", ex); JVM启动参数加上-XX:-OmitSta ...
- python网络编程应用(一)
在之前的一篇博客<python网络编程基础>中介绍了socket.socket()函数及其应用,其实socket模块中还有很多属性可供网络应用程序使用.这里将详细讲解一下socket模块 ...
- springmvc 开涛 注解式控制器
版本 定义处理器类 处理器映射适配器 备注 支持的注解 2.5前 controller 2.5 注解 DefaultAnnotationHandlerMapping AnnotationM ...