Python-Flask基础篇(二)
前言前面介绍了Flask和HTTP的基础知识,下面会介绍Flask的基础用法
第4章 表单在Web程序中,表单是和用户交互最常见的方式之一。用户注册、登录、撰写文章、编辑设置,无一不用到表单。不过,表单的处理却并不简单。你不仅要创建表单,验证用户输入的内容,向用户显示错误提示,还要获取并保存数据。幸运的是,强大的WTForms可以帮我们解决这些问题。WTForms是一个使用Python编写的表单库,它使得表单的定 义、验证(服务器端)和处理变得非常轻松。这一章我们会介绍在Web 程序中处理表单的方法和技巧。
使用Flask-WTF处理表单扩展Flask-WTF集成了WTForms,使用它可以在Flask中更方便地使用WTForms。Flask-WTF将表单数据解析、CSRF保护、文件上传等功能与Flask集成,另外还附加了reCAPTCHA支持。
Flask-WTF默认为每个表单启用CSRF保护,它会为我们自动生成和 验证CSRF令牌。默认情况下,Flask-WTF使用程序密钥来对CSRF令牌 进行签名,所以我们需要为程序设置密钥:
1app.secret_key = 'secret string'
定义WTForms表单类当使用WTForms创建表单时,表单由Python类表示,这个类继承从 WTForms导入的Form基类。一个表单由若干个输入字段组成,这些字 段分别用表单类的类属性来表示(字段即Field,你可以简单理解为表单 内的输入框、按钮等部件)。下面定义了一个LoginForm类,最终会生 成我们在前面定义的HTML表单:
12345678910from wtforms import Form, StringField, PasswordField, BooleanField, SubmitFieldfrom wtforms.validators import DataRequired, Length# 4.2.1 basic form exampleclass LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired(), Length(8, 128)]) remember = BooleanField('Remember me') submit = SubmitField('Log in')
每个字段属性通过实例化WTForms提供的字段类表示。字段属性的名称将作为对应HTML<input>元素的name属性及id属性值。
当使用Flask-WTF定义表单时,我们仍然使用WTForms提供的字段类和验证器,创建的方式也完全相同,只不过表单类要继承Flask-WTF提供的FlaskForm类。FlaskForm类继承自Form类,进行了一些设置,并附加了一些辅助方法,以便与Flask集成。