本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

Flask-WTF表单验证

Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。当然还包括一些其他的功能:CSRF保护,文件上传等。安装Flask-WTF默认也会安装WTForms,因此使用以下命令来安装Flask-WTF:

pip install flask-wtf

一、表单验证:

安装完Flask-WTF后。来看下第一个功能,就是用表单来做数据验证,现在有一个forms.py文件,然后在里面创建一个RegistForm的注册验证表单:

class RegistForm(Form): name = StringField(validators=[length(min=4,max=25)]) email = StringField(validators=[email()]) password = StringField(validators=[DataRequired(),length(min=6,max=10),EqualTo('confirm')]) confirm = StringField()

在这个里面指定了需要上传的参数,并且指定了验证器,比如name的长度应该在4-25之间。email必须要满足邮箱的格式。password长度必须在6-10之间,并且应该和confirm相等才能通过验证。

写完表单后,接下来就是regist.html文件:

<form action="/regist/" method="POST"> <table> <tr> <td>用户名:</td> <td><input type="text" name="name"></td> </tr> <tr> <td>邮箱:</td> <td><input type="email" name="email"></td> </tr> <tr> <td>密码:</td> <td><input type="password" name="password"></td> </tr> <tr> <td>确认密码:</td> <td><input type="password" name="confirm"></td> </tr> <tr> <td></td> <td><input type="submit" value="提交"></td> </tr> </table> </form>

再来看视图函数regist

@app.route('/regist/',methods=['POST','GET']) def regist(): form = RegistForm(request.form) if request.method == 'POST' and form.validate(): user = User(name=form.name.data,email=form.email.data,password=form.password.data) db.session.add(user) db.session.commit() return u'注册成功!' return render_template('regist.html')

RegistForm传递的是request.form进去进行初始化,并且判断form.validate会返回用户提交的数据是否满足表单的验证。

二、渲染模板:

form还可以渲染模板,让你少写了一丢丢的代码,比如重写以上例子,RegistForm表单代码如下:

class RegistForm(Form): name = StringField(u'用户名:',validators=[length(min=4,max=25)]) email = StringField(u'邮箱:'validators=[email()]) password = StringField(u'密码:',validators=[DataRequired(),length(min=6,max=10),EqualTo('confirm')]) confirm = StringField(u'确认密码:')

以上增加了第一个位置参数,用来在html文件中,做标签提示作用。

app中的视图函数中,修改为如下:

@app.route('/regist/',methods=['POST','GET']) def regist(): form = RegistForm(request.form) if request.method == 'POST' and form.validate(): user = User(name=form.name.data,email=form.email.data,password=form.password.data) db.session.add(user) db.session.commit() return u'注册成功!' return render_template('regist.html',form=form)

以上唯一的不同是在渲染模板的时候传入了form表单参数进去,这样在模板中就可以使用表单form变量了。

接下来看下regist.html文件:

<form action="/regist/" method="POST"> <table> <tr> <td>{{ form.name.label }}</td> <td>{{ form.name() }}</td> </tr> <tr> <td>{{ form.email.label }}</td> <td>{{ form.email() }}</td> </tr> <tr> <td>{{ form.password.label }}</td> <td>{{ form.password() }}</td> </tr> <tr> <td>{{ form.confirm.label }}</td> <td>{{ form.confirm() }}</td> </tr> <tr> <td></td> <td><input type="submit" value="提交"></td> </tr> </table> </form>

5409人已阅读,今天你学习了吗?

添加新回复