如何使用WTForms对表单进行验证?

编程入门 行业动态 更新时间:2024-10-10 15:25:17

如何使用WTForms对<a href=https://www.elefans.com/category/jswz/34/1771263.html style=表单进行验证?"/>

如何使用WTForms对表单进行验证?

WTForms的作用主要有两点:

1、验证表单

2、渲染模板

当然,还有其它功能:比如上传文件、CSRF保护。本章就为大家讲讲如何使用WTForms对表单进行验证?

在使用WTForms插件之前,请确保你电脑已安装了WTForms!安装Flask-Wtf默认会安装WTForms,安装代码如下:

pip install flask-wtf

在templates新建一个resigt.html文件,代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>注册页面</title>
</head>
<body><form action="" method="post"><table><tr><td>姓名</td><td><input type="text" name="name"></td></tr><tr><td>密码</td><td><input type="password" name="password"></td></tr><tr><td>确认密码</td><td><input type="password" name="repeat_pwd"></td></tr><tr><td><input type="submit" name="sub" value="注册"></td></tr></table></form>
</body>
</html>

新建一个flask项目(flask_wtf_demo.py),其代码如下:

from flask import Flask,request,render_templateapp = Flask(__name__)@app.route('/')
def index():return "hello,python!"@app.route('/regist',methods=["GET","POST"])
def resigt():if request.method == "GET":return render_template("resigt.html")else:passif __name__ == "__main__":app.run(debug=True)

运行flask_wtf_demo文件代码,结果如下:


界面丑了点,大伙将就着看!下面我们先用传统方法来验证用户提交数据合法性,代码如下:

from flask import Flask,request,render_templateapp = Flask(__name__)@app.route('/')
def index():return "hello,python!"@app.route('/regist',methods=["GET","POST"])
def resigt():if request.method == "GET":return render_template("resigt.html")else:#通过requesr.form来获取用户输入的值name = request.form.get("name")password = request.form.get("password")repeat_pwd = request.form.get("repeat_pwd")# 如果name长度小于3或者name长度大于6,则用户名不合法if len(name) < 3 or len(name) > 6:return "用户名不合法"# 如果密码长度小于3或者密码长度大于10,则密码不合法if len(password) < 3 or len(password) > 10:return "密码不合法"# 如果密码与确认密码不一致,则不合法if len(repeat_pwd) != len(password):return "两次密码输入不一样"else:return "注册数据提交成功"
if __name__ == "__main__":app.run(debug=True)

我们再运行上述代码,结果如下:


我们先输入合法数据试试,结果如下:


再输入不合法数据,结果如下:


上面代码虽然能实现用户数据验证,但是代码太复杂了,一大坨,很恶心,是吧!有没有既能实现效果,又能简化代码的法子呢?答案是有,那就是使用WTForms。

首先我们从wtfroms库中导入Form、StringField(用户验证input字段类型)代码如下:

from wtforms import Form,StringField

创建一个表单验证类,传如参数Form(不传参数是一个普通类),代码如下:

class RegistForm(Form):pass

接着从wtforms.validator中导入Length,EqualTo(验证用户输入字符长度及密码与确认密码是否一致),代码如下:

from swtforms.validator import Length,EqualTo

在该类中定义需要验证的字段及相应的验证条件。注意:name、password、repeat_pwd需与input中name保持一致!代码如下:

class RegistForm(Form):name = StringField(validators=[Length(max=6,min=3)])password = StringField(validators=[Length(max=10,min=3)])repeat_pwd = StringField(validators=[Length(max=10,min=3),EqualTo("password")])

我们再把之前哪段恶心的代码删除,要删除的代码如下:

        name = request.form.get("name")password = request.form.get("password")repeat_pwd = request.form.get("repeat_pwd")# 如果name长度小于3或者name长度大于6,则用户名不合法if len(name) < 3 or len(name) > 6:return "用户名不合法"# 如果密码长度小于3或者密码长度大于10,则密码不合法if len(password) < 3 or len(password) > 10:return "密码不合法"# 如果密码与确认密码不一致,则不合法if len(repeat_pwd) != len(password):return "两次密码输入不一样"else:return "注册数据提交成功"

删除代码之后,我们在实例化一个RegistForm对象赋值给form(其参数为我们要查找的字段)。代码如下:

form = RegistForm(request.form)

然后我们再判断用户提交数据是否合法,如果合法则返回success,否则返回fail,代码如下:

form = RegistForm(request.form)if form.validate():return "success"else:return "fail"

跟之前代码相比,是不是简洁很多,是吧?看着都舒服!

我们再运行flask_wtf_demo文件,运行效果如下:


我们先输入合法数据,然后再点击注册,结果如下:


我们再输入不合法数据试试,结果如下:


输入不合法数据,结果返回fail,虽然结果返回正确,但用户体验不太好!如果用户输入不合法数据,提示报错信息,代码如下:

 if form.validate():return "success"else:print(form.errors)return "fail"

我们再输入不合法数据试试,结果如下:


上图信息提示password字段必须在3到10位数之间,虽然我们知道出错信息在哪,但是洋文看好去很头痛,尤其是我们英语不好的同学,估计看着英语就晕了!还有没有更友好的,支持汉语的法子。方法:在验证器中定义message参数,代码如下所示:

class RegistForm(Form):name = StringField(validators=[Length(max=6,min=3)])password = StringField(validators=[Length(max=10,min=3,message="密码长度必须大于3并且小于10")])repeat_pwd = StringField(validators=[Length(max=10,min=3,message="密码长度必须大于3并且小于10"),EqualTo("password")])

我们再输入不合法字符试试,结果如下


用户体验是不是比之前好很多,是吧!关于WTForms基本使用今天就讲到这里。




















更多推荐

如何使用WTForms对表单进行验证?

本文发布于:2024-02-14 08:36:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1762593.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:表单   如何使用   WTForms

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!