Web应用程序的一个重要方面是为用户提供一个用户界面。 HTML提供了一个<form>标签,用于设计一个接口。 可以适当使用表单的元素,如文本输入,广播,选择等。通过GET或POST方法将用户输入的数据以Http请求消息的形式提交给服务器端脚本。
服务器端脚本必须从http请求数据重新创建表单元素。 所以实际上,表单元素必须被定义两次 - 一次是HTML,一次是服务器端脚本。使用HTML表单的另一个缺点是很难(如果不是不可能)动态地呈现表单元素。 HTML本身无法验证用户的输入。
这就是WTForms,一个灵活的表单,渲染和验证库来得方便的地方。 Flask-WTF扩展为这个WTForms库提供了一个简单的接口。
使用Flask-WTF,可以在Python脚本中定义表单域并使用HTML模板来呈现它们。 也可以将验证应用于WTF字段。
Flask-WTF是简化了WTForms操作的一个第三方库。WTForms表单的两个主要功能是验证用户提交数据的合法性以及渲染模板。还有其它一些功能:CSRF保护,文件上传等。
安装方法:
pip install flask-wtf
已安装的软件包包含一个Form类,该类必须用作用户定义表单的父级。WTforms包包含各种表单域的定义。
下面列出了一些标准表单字段:
1.WTForms简单验证
from flask import Flask,request,render_template from wtforms import Form,StringField from wtforms.validators import Length,EqualTo app = Flask(__name__) class RegistForm(Form): username = StringField(validators=[Length(min=3,max=10,message='用户名必须在3到10位之间')]) password = StringField(validators=[Length(min=6,max=10,message='密码必须6到10位之间')]) password_repeat = StringField(validators=[Length(min=6,max=10), EqualTo("password",message='密码不一致')]) @app.route('/') def hello_world(): return 'Hello World!' @app.route('/regist/',methods=['GET','POST']) def regist(): if request.method == 'GET': return render_template('regist.html') else: form = RegistForm(request.form) if form.validate(): return 'success' else: print(form.errors) return 'fail' if __name__ == '__main__': app.run()
2.WTForms常用验证器和自定义验证器
常用的验证器:
(1)Email:验证上传的数据是否为邮箱格式
(2)EqualTo:两个字段是否相等(密码和重复密码)
(3)InputRequired:原始数据的需要验证
(4)Length:长度限制,有mix和max两个值
(5)NumberRange:数字的区间,有mix和max两个值,如果在两个值之间则满足
(6)Regexp:自定义正则表达式
(7)URL:必须url格式
(8)UUID:uuid格式
相关推荐:《》
from wtforms import Form,StringField,IntegerField from wtforms.validators import Length,EqualTo,Email,InputRequired,NumberRange from wtforms.validators import Regexp,URL,ValidationError class LoginForm(Form): email = StringField(validators=[Email(message='邮箱格式不正确')]) username = StringField(validators=[InputRequired(message='这个字段必须要填')]) age = IntegerField(validators=[NumberRange(min=18,max=100)]) phone = StringField(validators=[Regexp(r'1[38745]\d{9}')]) homepage = StringField(validators=[URL()]) captcha = StringField(validators=[Length(4,4)]) # 自定义验证器 def validate_captcha(self,field): if field.data != '1234': #field.data:用户提交过来的数据 raise ValidationError('验证码错误') #如果验证失败,就抛出验证失败的异常
3.使用wtforms渲染模板
forms.py
class SettingsForm(Form): username = StringField(label="用户名:",validators=[InputRequired(message='这个字段必须要填')]) age = IntegerField('年龄:',validators=[NumberRange(min=18, max=100)]) remeber = BooleanField('记住我') tags = SelectField('标签',choices=[(1,'python'),(2,'django')])
flask_wtforms_demo.py
@app.route('/settings/',methods=['GET','POST']) def settings(): if request.method == 'GET': form = SettingsForm() return render_template('settings.html',form=form) else: pass
settings.html
<form action="" method="post"> {# 括号里面可以添加样式#} <p>{{ form.username.label }} {{ form.username(class="") }}</p> <p>{{ form.age.label }} {{ form.age() }}</p> <p>{{ form.remeber.label }} {{ form.remeber() }}</p> <p>{{ form.tags.label }} {{ form.tags() }}</p> <p><input type="submit" value="提交"></p> </form>
相关推荐:
伴沃教育还为您提供以下相关内容希望对您有帮助:
Flask中的wtform使用
pip3 install wtforms 字段类型 说明 StringField 文本字段 TextAreaField 多行文本字段 PasswordField
python flask的wtforms可以处理可变长的表单吗
可以参考下吧,好运!!另一个,更好的方法,应该是用Python的多重继承来实现,,因为,wtforms的官方网站里,就有例子,它的表单类,是可以继承的(下面是复制的wtforms的官方网站)Form Inheritance Forms may subclass other forms as needed. The new form will contain all fields of the parent f...
Python的Flask框架中web表单
当validate_on_submit() 方法返回 True 的时候,我们的视图函数又会调用两个新的函数。它们都是从Flask 中引入的,flash 函数用来在下一个打开的页面中显示定义的消息。我们现在用它用来做调试。因为我们现在还没有做用户登录模块, 所以只需要把用户提交上来的数据显示一下就行了。flash 函数非常有用,比如为用户的...
flask wtforms 同一个页面多个表单怎么实现
app.route('/test/')def test(): form1 = TestForm1() form2 = TestForm2() return remder_template('test.html',form1=form1,form2=form2) {{ form1.field() }} {{ form2.field() }} 再编写两个视图函数分别接收form1,form2提交的数据:app.route('/te...
干货分享!Python三大web框架简单介绍
Flask 很轻,花很少的成本就能够开发一个简单的网站。非常适合初学者学习。Flask 框架学会以后,可以考虑学习插件的使用。例如使用 WTForm + Flask-WTForm 来验证表单数据,用 SQLAlchemy + Flask-SQLAlchemy 来对你的数据库进行控制。3、Tornado Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在...
Python三大web框架分别是什么 哪个更好
Flask 很轻,花很少的成本就能够开发一个简单的网站。非常适合初学者学习。Flask 框架学会以后,可以考虑学习插件的使用。例如使用 WTForm + Flask-WTForm 来验证表单数据,用 SQLAlchemy + Flask-SQLAlchemy 来对你的数据库进行控制。3、Tornado Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在...
Python 有哪些好的 Web 框架
第一个:Django Django是一个开源的Web应用框架,由Python写成,支持许多数据库引擎,可以让Web开发变得迅速和可扩展,并会不断的版本更新以匹配Python最新版本,如果是新手程序员,可以从这个框架入手。第二个:Flask Flask是一个轻量级的Web应用框架,使用Python编写。基于WerkzeugWSGI工具箱和JinJa2模板引擎...
要想学习Python高级编程,需要学习哪些内容?
阶段一:Python开发基础 Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法、数据类型、字符编码、文件操作、函数、装饰器、迭代器、内置方法、常用模块等。阶段二:Python高级编程和数据库开发 Python全栈开发与人工智能之Python高级编程和数据库开发知识学习内容包括:面向对象开发、Socket...
python后端开发需要学什么?
主要学习Python库、正则表达式、进程线程、爬虫、遍历以及MySQL数据库。 第三阶段:Python web开发 主要学习HTML、CSS、JavaScript、jQuery等前端知识,掌握python三大后端框架(Django、 Flask以及Tornado)。需要完成网页界面设计实战;能独立开发网站。 第四阶段:Linux基础 主要学习Linux相关的各种命令,如文件处理命令、压缩解压...
python flask的wtforms可以处理可变长的表单吗
另一个,更好的方法,应该是用Python的多重继承来实现,,因为,wtforms的官方网站里,就有例子,它的表单类,是可以继承的(下面是复制的wtforms的官方网站)Form Inheritance Forms may subclass other forms as needed. The new form will contain all fields of the parent form, as well as any ...