Flask中的flask_wtf使用

簡(jiǎn)介:Flask-WTF是集成WTForms,并帶有 csrf 令牌的安全表單和全局的 csrf 保護(hù)的功能。
每次我們?cè)诮⒈韱嗡鶆?chuàng)建的類都是繼承與flask_wtf中的FlaskForm,而FlaskForm是繼承WTForms中forms。

用法

  1. 創(chuàng)建基礎(chǔ)表單:

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

    任何使用FlaskForm創(chuàng)建的表單發(fā)送請(qǐng)求,都會(huì)有CSRF的全部保護(hù),在對(duì)應(yīng)的template中HTML渲染表單時(shí),可以加入form.csrf_token:

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

    如果模板中沒(méi)有表單,則可以使用一個(gè)隱藏的input標(biāo)簽加入csrf_token。

    <form method="post">
        <input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
    </form>
    
  3. 表單驗(yàn)證:

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

    使用validate_on_submit 來(lái)檢查是否是一個(gè) POST 請(qǐng)求并且請(qǐng)求是否有效。

  4. 文件上傳:

    Flask-WTF 提供 FileField 來(lái)處理文件上傳,它在表單提交后,自動(dòng)從 flask.request.files 中抽取數(shù)據(jù)。FileFielddata 屬性是一個(gè) Werkzeug FileStorage 實(shí)例。

    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. 驗(yàn)證碼:

    Flask-WTF 通過(guò) RecaptchaField 也提供對(duì)驗(yàn)證碼的支持:

    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 可選 驗(yàn)證碼 API 服務(wù)器
    RECAPTCHA_PARAMETERS 可選 一個(gè) JavaScript(api.js)參數(shù)的字典
    RECAPTCHA_DATA_ATTRS 可選 一個(gè)數(shù)據(jù)屬性項(xiàng)列表 https://developers.google.com/recaptcha/docs/display

總結(jié)

? Flask-WTF提供了創(chuàng)建表單、csrf保護(hù)、表單請(qǐng)求驗(yàn)證、文件上傳、驗(yàn)證碼等功能。

參考鏈接:http://www.itdecent.cn/p/7e16877757f8

每天多努力那么一點(diǎn)點(diǎn),積少成多

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容