27
2020
04

Flask-WTF是什么,有什么特点?

Flask-wtf是一个用于表单处理,校验并提供csrf验证的功能的扩展库

Flask-wtf能把正表单免受CSRF<跨站请求伪造>的攻击 

eg:

form.html


<form action="{{ url_for('wtf_form') }}" method='post'>

    {{ form.csrf_token }} #进入csrf验证

    <p>{{ form.username.label }}{{ form.username(style='color:red',placeholder='请输入用户名') }}{{ form.username.errors }}</p>

    <p>{{ form.userpass.label }}{{ form.userpass() }}{{ form.userpass.errors }}</p>

    <p>{{ form.submit() }}</p>

</form>


manage.py


from flask import Flask,render_template,request

from flask_wtf import FlaskForm   #导入继承父类

from wtforms import StringField,PasswordField,SubmitField

from wtforms.validators import Length,DataRequired


class Login(FlaskForm):  #继承自FlaskForm类

    username = StringField('用户名',validators=[Length(min=6,max=12,message='用户名长度为6~12位'),DataRequired(message='用户名不能为空')])

    userpass = PasswordField('密码',validators=[Length(min=6,max=12,message='密码长度为6~12位'),DataRequired(message='密码不能为空')])

    submit = SubmitField('登录')



@app.route('/wtf_form',methods=['GET','POST'])

def wtf_form():

    form = Login()  #实例化form对象

    if request.method == 'POST':

        if form.validate_on_submit():  #数据正确 并且验证csrf通过

            print(request.form.get('userpass'))

            print(request.form.get('username'))

            return '数据提交成功'

    return render_template('wtf_form.html',form=form)


#注:

#1 methods 参数告诉Flask在URL映射中把这个视图函数注册为GET和POST请求的处理程序,默认GET

#2 采用post请求可以通过对象很轻松访问,GET 请求没有主体,提交的数据以查询字符串的形式附加到URL中

#3 validate_on_submit() 会调用username 字段上附属的 DataRequired() 验证函数。


« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。