Flask中的flask_wtf使用
2020-02-08 本文已影响0人
极客匠
简介:Flask-WTF是集成WTForms,并带有 csrf 令牌的安全表单和全局的 csrf 保护的功能。
每次我们在建立表单所创建的类都是继承与flask_wtf中的FlaskForm,而FlaskForm是继承WTForms中forms。
用法
-
创建基础表单:
class LoginForm(FlaskForm): username = StringField() password = PasswordField() remember_me = BooleanField(label='Keep me logged in')
-
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>
-
表单验证:
def login(): form = LoginForm() if form.validate_on_submit(): return redirect('/success') return render_template('login.html', form=form)
使用
validate_on_submit
来检查是否是一个 POST 请求并且请求是否有效。 -
文件上传:
Flask-WTF 提供
FileField
来处理文件上传,它在表单提交后,自动从flask.request.files
中抽取数据。FileField
的data
属性是一个 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)
-
验证码:
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
每天多努力那么一点点,积少成多