
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第30天,点击查看活动详情
表单在页面中主要负责数据采集,一个表单有三个基本组成部分:
常见的表单有注册表单、登录表单、搜索表单等
视图函数中获取表单数据的方式有两种:
WTF 表单是一个第三方的库,可以通过Python代码生成表单,而Flask-WTF则是Flask集成了WTF表单功能的实现。

Flask-WTF可以实现这些功能,
更多信息可以查看 Flask-WTF 官网。Flask-WTF需要通过安装才可以使用。
pip3 install Flask-WTF在Pycharm中创建新的Flask项目flask-wtf,要使用Flask-WTF需要在app.py中创建Flask对象之后添加如下配置,
# 配置WTF的CSRF,Value可以是任意的字符串
app.config['WTF_CSRF_SECRET_KEY'] = 'abc21231fafae2'在项目目录下新建一个form.py文件,专门用来编写表单模型,以登录表单为例,新增一个LoginForm对象,并增加相应的属性
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
class LoginForm(FlaskForm):
    username = StringField(label='用户名')
    password = PasswordField(label='密码')
    submit = SubmitField(label='提交')表单字段的常用核心属性如下
| 属性名 | 属性作用 | 
|---|---|
| label | form表单中的label标签,如输入框前的文字描述 | 
| default | 表单中输入框的默认值 | 
| validators | 表单验证规则 | 
| widget | 定制界面的显示方式 | 
| description | 帮助文字 | 
在app.py中增加视图函数
from flask import Flask, render_template
from form import LoginForm
@app.route('/form')
def form():
    login_form = LoginForm()
    # 返回login_form表单模型,在form.html中进行渲染
    return render_template('form.html', login_form=login_form)在templates增加form.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <title>Form</title>
</head>
<body>
<h3>登录</h3>
<form action="">
    {# 渲染LoginForm表单模型中username字段的label属性#}
    {{ login_form.username.label }}:
    {{ login_form.username }} <br>
    {{ login_form.password.label }}:
    {{ login_form.password }} <br>
    {{ login_form.submit }}
</form>
</body>
</html>启动应用,浏览器访问 http://127.0.0.1:5000/form

表单渲染成功,但是input输入框是空白的,可以通过表单模型中字段的default属性来设置默认值
# 其余代码不变
class LoginForm(FlaskForm):
    username = StringField(label='用户名', default='stark')
    password = PasswordField(label='密码', default='1231231')
    submit = SubmitField(label='提交')再次访问 http://127.0.0.1:5000/form

用户名字段类型是StringField并且显示了设置的默认值,密码是PasswordField类型,虽然设置了默认值,但是是不能显示的。在表单中的用户名和密码输入框中输入数据

可以看出密码是非明文显示的
在第一个表单模型中使用了两个字段类型,分别是StringField和PasswordField,并且在页面输入密码是也能够将密码以非明文的形式显示,除了这两个类型外还有其他的字段类型,