Flask中的flask_wtf使用

2020-02-08  本文已影响0人  极客匠

简介:Flask-WTF是集成WTForms,并带有 csrf 令牌的安全表单和全局的 csrf 保护的功能。
每次我们在建立表单所创建的类都是继承与flask_wtf中的FlaskForm,而FlaskForm是继承WTForms中forms。

用法

  1. 创建基础表单:

    class LoginForm(FlaskForm):
        username = StringField()
        password = PasswordField()
        remember_me = BooleanField(label='Keep me logged in')
    
  2. CSRF保护

    任何使用FlaskForm创建的表单发送请求,都会有CSRF的全部保护,在对应的template中HTML渲染表单时,可以加入form.csrf_token:

    <form method="post">
        {{ form.csrf_token }}
    </form>
    

    如果模板中没有表单,则可以使用一个隐藏的input标签加入csrf_token。

    <form method="post">
        <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
    </form>
    
  3. 表单验证:

    def login():
        form = LoginForm()
        if form.validate_on_submit():
            return redirect('/success')
        return render_template('login.html', form=form)
    

    使用validate_on_submit 来检查是否是一个 POST 请求并且请求是否有效。

  4. 文件上传:

    Flask-WTF 提供 FileField 来处理文件上传,它在表单提交后,自动从 flask.request.files 中抽取数据。FileFielddata 属性是一个 Werkzeug FileStorage 实例。

    from werkzeug import secure_filename
    from flask_wtf.file import FileField
    
    class PhotoForm(Form):
        photo = FileField('Your photo')
    
    @app.route('/upload/', methods=('GET', 'POST'))
    def upload():
        form = PhotoForm()
        if form.validate_on_submit():
            filename = secure_filename(form.photo.data.filename)
            form.photo.data.save('uploads/' + filename)
        else:
            filename = None
        return render_template('upload.html', form=form, filename=filename)
    
  1. 验证码:

    Flask-WTF 通过 RecaptchaField 也提供对验证码的支持:

    from flask_wtf import Form, RecaptchaField
    from wtforms import TextField
    
    class SignupForm(Form):
        username = TextField('Username')
        recaptcha = RecaptchaField()
    

    还需要配置一下信息:

    字段 配置
    RECAPTCHA_PUBLIC_KEY 必须 公钥
    RECAPTCHA_PRIVATE_KEY 必须 私钥
    RECAPTCHA_API_SERVER 可选 验证码 API 服务器
    RECAPTCHA_PARAMETERS 可选 一个 JavaScript(api.js)参数的字典
    RECAPTCHA_DATA_ATTRS 可选 一个数据属性项列表 https://developers.google.com/recaptcha/docs/display

总结

​ Flask-WTF提供了创建表单、csrf保护、表单请求验证、文件上传、验证码等功能。

参考链接:https://www.jianshu.com/p/7e16877757f8

每天多努力那么一点点,积少成多

上一篇下一篇

猜你喜欢

热点阅读