本文概述
WTF代表WT Forms, 旨在为用户提供交互式用户界面。 WTF是Python Flask的内置模块, 它提供了在Python FlaskWeb应用程序中设计表单的另一种方法。
为什么WTF有用?
由于以下因素, WTF很有用。
- 表单元素与请求对象一起从客户端发送到服务器端。服务器端脚本需要重新创建表单元素, 因为客户端表单元素与服务器端要使用的变量之间没有直接映射。
- 无法实时呈现HTML表单数据。
WT Forms是用于提供用户界面的灵活的表单呈现和验证库。
安装Flask-WTF
要使用WT表单, 我们需要安装flask-wtf库, 该库可以使用pip installer安装。
$ pip install flask-wtf
该模块包含一个Form类, 该类被视为所有与表单相关的操作的父类。
下面列出了标准表单字段。
SN | Form Field | Description |
---|---|---|
1 | TextField | 它用于表示文本字段的HTML表单元素。 |
2 | BooleanField | 它用于表示复选框HTML表单元素。 |
3 | DecimalField | 它用于表示文本字段以显示带有小数的数字。 |
4 | IntegerField | 它用于表示文本字段以显示整数值。 |
5 | RadioField | 它用于表示单选按钮HTML表单元素。 |
6 | SelectField | 它用于表示选择表单元素。 |
7 | TextAreaField | 它用于表示文本区域表单元素。 |
8 | PasswordField | 它用于将密码作为用户输入的形式。 |
9 | SubmitField | 它提供了表示<input type =’submit’value =’Submit’> html表单元素。 |
考虑以下示例。
例子
在此示例中, 我们将使用flask WTF模块创建一个表单。首先, 我们将创建一个名为forms.py的表单类, 并将这些表单元素导入模块formexample.py中。
forms.py
from flask_wtf import Form
from wtforms import TextField, IntegerField, TextAreaField, SubmitField, RadioField, SelectField
from wtforms import validators, ValidationError
class ContactForm(Form):
name = TextField("Candidate Name ", [validators.Required("Please enter your name.")])
Gender = RadioField('Gender', choices = [('M', 'Male'), ('F', 'Female')])
Address = TextAreaField("Address")
email = TextField("Email", [validators.Required("Please enter your email address."), validators.Email("Please enter your email address.")])
Age = IntegerField("Age")
language = SelectField('Programming Languages', choices = [('java', 'Java'), ('py', 'Python')])
submit = SubmitField("Submit")
formexample.py
from flask import Flask, render_template, request, flash
from forms import ContactForm
app = Flask(__name__)
app.secret_key = 'development key'
@app.route('/contact', methods = ['GET', 'POST'])
def contact():
form = ContactForm()
if form.validate() == False:
flash('All fields are required.')
return render_template('contact.html', form = form)
@app.route('/success', methods = ['GET', 'POST'])
def success():
return render_template("success.html")
if __name__ == '__main__':
app.run(debug = True)
contact.html
<!doctype html>
<html>
<body>
<h2 style = "text-align: center;">Registration Form</h2>
{% for message in form.name.errors %}
<div>{{ message }}</div>
{% endfor %}
{% for message in form.email.errors %}
<div>{{ message }}</div>
{% endfor %}
<form action = "http://localhost:5000/success" method = "POST">
{{ form.hidden_tag() }}
<div style = "font-size:18px;" font-weight:bold; margin-left:150px;>
{{ form.name.label }}<br>
{{ form.name }}
<br>
{{ form.Gender.label }} {{ form.Gender }}
{{ form.Address.label }}<br>
{{ form.Address }}
<br>
{{ form.email.label }}<br>
{{ form.email }}
<br>
{{ form.Age.label }}<br>
{{ form.Age }}
<br>
{{ form.language.label}}<br><br>
{{ form.language }}
<br><br>
{{ form.submit }}
</div>
</fieldset>
</form>
</body>
</html>
success.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h1>Form posted successfully</h1>
</body>
</html>
输出
评论前必须登录!
注册