美文网首页
Flask中的flask_wtf使用

Flask中的flask_wtf使用

作者: 极客匠 | 来源:发表于2020-02-08 23:15 被阅读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

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

    相关文章

      网友评论

          本文标题:Flask中的flask_wtf使用

          本文链接:https://www.haomeiwen.com/subject/lfdixhtx.html