下面我将为您讲解在Python的Flask中使用WTForms表单框架的基础教程。
一、安装WTForms
在Python命令行中使用pip命令安装WTForms框架,方法如下:
pip install WTForms
二、使用WTForms
1.创建表单类
首先,我们需要创建一个表单类来描述我们的表单。在这个表单类中,我们需要定义表单的字段类型、验证规则以及错误提示信息。下面是一个简单的表单类示例:
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length
class LoginForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)])
password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=20)])
submit = SubmitField('Login')
在这个示例中,我们定义了一个名为LoginForm
的表单类,包含了username
、password
和submit
三个表单字段。其中,username
和password
都是字符串类型的字段,分别对应用户名和密码。submit
是一个提交按钮类型的字段。
对于每个字段,我们都可以使用validators
参数来指定验证规则。例如,DataRequired()
表示该字段必填,Length(min=6, max=20)
表示该字段的长度应该在6到20个字符之间。
2.渲染表单
在视图函数中创建表单对象并传递给模板,以实现表单的渲染。下面是一个示例:
from flask import render_template
from .forms import LoginForm
@app.route('/login', methods=['GET', 'POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
# 处理表单提交
username = form.username.data
password = form.password.data
...
return render_template('login.html', form=form)
在这个示例中,我们首先创建了一个名为form
的表单对象,然后用它来渲染名为login.html
的模板。当用户提交表单时,如果表单验证通过,我们就可以在if form.validate_on_submit()
这个条件语句中处理表单提交的数据。
3.定义表单模板
最后,在模板文件中使用WTForms提供的宏来渲染表单,以实现数据的收集和验证。下面是一个示例:
{% extends "base.html" %}
{% block content %}
<h2>Login</h2>
<form method="POST" action="{{ url_for('login') }}">
{{ form.csrf_token }}
{{ form.username.label }}
{{ form.username() }}
{% for error in form.username.errors %}
<span class="error">{{ error }}</span>
{% endfor %}
{{ form.password.label }}
{{ form.password() }}
{% for error in form.password.errors %}
<span class="error">{{ error }}</span>
{% endfor %}
{{ form.submit() }}
</form>
{% endblock %}
在这个示例中,我们使用了WTForms提供的form
宏来渲染表单。在form
标签中,我们指定了表单的提交方式和目标,以及使用了模板引擎提供的url_for
函数来生成目标地址。在表单的中间部分,我们使用了csrf_token
来防止跨站请求攻击。在每个表单字段的下方,我们使用了{% for %}循环语句来逐一渲染错误提示信息。
示例一
下面是一个完整示例,展示了如何使用WTForms来实现一个注册表单:
1.创建表单类
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Length, Email, EqualTo
class RegisterForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)])
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=20)])
confirm_password = PasswordField('Confirm Password', validators=[DataRequired(), EqualTo('password')])
submit = SubmitField('Register')
在这个表单类中,我们定义了4个表单字段,包含用户名、邮箱、密码和确认密码,都有相应的验证规则和错误提示信息。
2.在视图函数中使用表单类
from flask import render_template, redirect, url_for
from .forms import RegisterForm
@app.route('/register', methods=['GET', 'POST'])
def register():
form = RegisterForm()
if form.validate_on_submit():
# 处理表单提交
username = form.username.data
email = form.email.data
password = form.password.data
...
return redirect(url_for('login'))
return render_template('register.html', form=form)
在这个视图函数中,我们创建了一个名为form
的表单对象,并在if form.validate_on_submit()
这个条件语句中处理表单提交的数据。如果提交成功,我们就重定向到登录页面。
3.在模板文件中渲染表单
{% extends "base.html" %}
{% block content %}
<h2>Register</h2>
<form method="POST" action="{{ url_for('register') }}">
{{ form.csrf_token }}
{{ form.username.label }}
{{ form.username() }}
{% for error in form.username.errors %}
<span class="error">{{ error }}</span>
{% endfor %}
{{ form.email.label }}
{{ form.email() }}
{% for error in form.email.errors %}
<span class="error">{{ error }}</span>
{% endfor %}
{{ form.password.label }}
{{ form.password() }}
{% for error in form.password.errors %}
<span class="error">{{ error }}</span>
{% endfor %}
{{ form.confirm_password.label }}
{{ form.confirm_password() }}
{% for error in form.confirm_password.errors %}
<span class="error">{{ error }}</span>
{% endfor %}
{{ form.submit() }}
</form>
{% endblock %}
在这个模板文件中,我们使用了WTForms提供的form
宏来渲染表单,包含了用户名、邮箱、密码和确认密码四个字段。
示例二
下面是一个完整示例,展示了如何使用WTForms来实现一个多选框表单:
1.创建表单类
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SelectMultipleField, SubmitField
from wtforms.validators import DataRequired, Length
class SurveyForm(FlaskForm):
username = StringField('Username', validators=[DataRequired(), Length(min=4, max=20)])
colors = SelectMultipleField('Which colors do you like?', choices=[('red', 'Red'), ('blue', 'Blue'), ('green', 'Green'), ('yellow', 'Yellow')])
submit = SubmitField('Submit')
在这个表单类中,我们定义了2个表单字段,包含了用户名和多选框,后者可以选择多个颜色选项。
2.在视图函数中使用表单类
from flask import render_template
from .forms import SurveyForm
@app.route('/survey', methods=['GET', 'POST'])
def survey():
form = SurveyForm()
if form.validate_on_submit():
# 处理表单提交
username = form.username.data
colors = form.colors.data
...
return render_template('survey.html', form=form)
在这个视图函数中,我们创建了一个名为form
的表单对象,并在if form.validate_on_submit()
这个条件语句中处理表单提交的数据。由于多选框可以选择多个选项,因此我们使用form.colors.data
来获取选中的选项。
3.在模板文件中渲染表单
{% extends "base.html" %}
{% block content %}
<h2>Survey</h2>
<form method="POST" action="{{ url_for('survey') }}">
{{ form.csrf_token }}
{{ form.username.label }}
{{ form.username() }}
{% for error in form.username.errors %}
<span class="error">{{ error }}</span>
{% endfor %}
{{ form.colors.label }}
{{ form.colors() }}
{% for error in form.colors.errors %}
<span class="error">{{ error }}</span>
{% endfor %}
{{ form.submit() }}
</form>
{% endblock %}
在这个模板文件中,我们使用了WTForms提供的form
宏来渲染表单,包含了用户名和多选框两个字段。请注意,在多选框标签的choices
参数中,我们定义了4个选项,每个选项都包含了一个值和一个显示文本。在form.colors()
中,多选框会自动将选项渲染出来。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在Python的Flask中使用WTForms表单框架的基础教程 - Python技术站