Flask-WTF表单的使用方法

yizhihongxing

Flask-WTF是一个在Flask中使用表单的第三方扩展程序,它可以帮助我们在Flask中方便地处理表单数据并进行验证,避免了手动处理表单数据的繁琐过程。下面是Flask-WTF表单的使用方法:

安装Flask和Flask-WTF

首先安装需要的扩展程序,可以通过pip安装:

pip install Flask
pip install Flask-WTF

创建Flask应用程序

在安装好扩展程序之后,我们可以创建一个Flask应用程序。以下是一个简单的示例:

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField


app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

class SimpleForm(FlaskForm):
    name = StringField('Name:')
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
def index():
    form = SimpleForm()
    if form.validate_on_submit():
        name = form.name.data
        return f'Hello {name}!'
    return render_template('index.html', form=form)

运行这个程序后,在浏览器中访问http://localhost:5000,将会看到一个带有一个输入框和一个提交按钮的表单。当你在输入框中输入名字,然后点击提交按钮时,将会返回“Hello [输入的名字]!”的字符串。

表单的字段

Flask-WTF表单定义了一些用于表单的字段,如文本输入框,密码输入框,复选框等等。以下是一些常用的字段:

  • StringField:文本输入框
  • PasswordField:密码输入框
  • TextAreaField:多行文本输入框
  • BooleanField:复选框
  • SelectField:下拉列表
  • RadioField:单选按钮列表
  • SubmitField:提交按钮

我们可以通过这些字段创建表单。例如,我们可以创建一个包含用户名和密码的表单:

class LoginForm(FlaskForm):
    username = StringField('Username')
    password = PasswordField('Password')
    remember = BooleanField('Remember Me')
    submit = SubmitField('Submit')

表单的验证

Flask-WTF表单除了可以快速处理表单数据外,还可以帮助我们验证表单数据。以下是一些常用的验证器:

  • DataRequired:验证字段不为空
  • Email:验证邮件地址格式
  • Length:验证字段长度
  • Regexp:使用正则表达式验证字段
  • EqualTo:验证两个字段是否相等

我们可以在表单的某个字段上使用这些验证器。例如,我们可以对登录表单进行验证:

from wtforms.validators import DataRequired, EqualTo


class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    remember = BooleanField('Remember Me')
    submit = SubmitField('Submit')

使用表单

最后,我们需要将表单显示在网页上,并将输入的数据传递给服务器端进行处理。以下是一个示例:

{% extends "base.html" %}

{% block content %}
  <h1>Login</h1>
  <form method="POST" action="">
    {{ form.hidden_tag() }}
    <p>
      {{ form.username.label }}<br>
      {{ form.username() }}
    </p>
    <p>
      {{ form.password.label }}<br>
      {{ form.password() }}
    </p>
    <p>{{ form.remember() }} {{ form.remember.label }}</p>
    <p>{{ form.submit() }}</p>
  </form>
{% endblock %}

在Flask的路由函数中,我们可以使用form.validate_on_submit()来判断表单是否被提交并且输入数据是否有效。例如,在登录页面中:

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # 验证登录信息
        return redirect(url_for('home'))
    return render_template('login.html', form=form)

这样,我们就可以使用Flask-WTF表单来处理表单数据和验证,从而方便快捷地创建具有表单功能的Web应用程序。

示例

示例1:注册表单

以下是一个示例,展示了如何使用Flask-WTF表单创建一个简单的注册表单,包括用户名,密码和确认密码:

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, ValidationError
from wtforms.validators import DataRequired, Length, EqualTo


app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'

class RegisterForm(FlaskForm):
    username = StringField('Username:', validators=[DataRequired(), Length(min=3, max=20)])
    password = PasswordField('Password:', validators=[DataRequired(), Length(min=6, max=20)])
    confirm_password = PasswordField('Confirm Password:', validators=[DataRequired(), EqualTo('password')])
    submit = SubmitField('Register')

@app.route('/', methods=['GET', 'POST'])
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        # 处理注册信息
        return 'Registration succeeded!'
    return render_template('register.html', form=form)

在register.html文件中,我们创建了一个包含注册表单的网页,并且通过form.hidden_tag()添加了一个CSRF令牌来提高安全性:

{% extends "base.html" %}

{% block content %}
  <h1>Register</h1>
  <form method="POST" action="">
    {{ form.hidden_tag() }}
    <p>
      {{ form.username.label }}<br>
      {{ form.username() }}
    </p>
    <p>
      {{ form.password.label }}<br>
      {{ form.password() }}
    </p>
    <p>
      {{ form.confirm_password.label }}<br>
      {{ form.confirm_password() }}
    </p>
    <p>{{ form.submit() }}</p>
  </form>
{% endblock %}

示例2:上传文件表单

以下是另一个示例,展示了如何使用Flask-WTF表单创建一个包含文件上传功能的表单:

import os
from flask import Flask, render_template, request, redirect, url_for
from flask_wtf import FlaskForm
from werkzeug.utils import secure_filename
from wtforms import FileField, SubmitField


app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
app.config['UPLOAD_FOLDER'] = 'uploads'


class UploadForm(FlaskForm):
    file = FileField('Choose a file:')
    submit = SubmitField('Upload')


@app.route('/', methods=['GET', 'POST'])
def upload():
    form = UploadForm()
    if form.validate_on_submit():
        f = form.file.data
        filename = secure_filename(f.filename)
        f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        return redirect(url_for('uploaded_file', filename=filename))
    return render_template('upload.html', form=form)

@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return f'Uploaded file: {filename}'

在upload.html文件中,我们创建了一个包含文件上传功能的网页:

{% extends "base.html" %}

{% block content %}
  <h1>Upload a file</h1>
  <form method="POST" action="" enctype="multipart/form-data">
    {{ form.hidden_tag() }}
    <p>{{ form.file.label }} {{ form.file() }}</p>
    <p>{{ form.submit() }}</p>
  </form>
{% endblock %}

在这个示例中,我们需要将表单的enctype属性设置为"multipart/form-data",以便能够上传文件。在服务器端,我们通过request.files获取上传文件的内容,并将其保存到指定的目录中。

注意,这个示例中使用了secure_filename函数来避免文件名中的非法字符,从而提高了安全性。

这样,我们就可以使用Flask-WTF表单来创建具有文件上传功能的Web应用程序。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask-WTF表单的使用方法 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月16日

相关文章

  • 使用Python FastAPI构建Web服务的实现

    使用Python FastAPI构建Web服务的实现可以分为以下步骤: 1. 安装FastAPI FastAPI是一个基于Python的Web框架,提供了快速、简单和易于使用的方式来构建Web API。您可以使用以下命令在Python环境中安装FastAPI: pip install fastapi 2. 安装uvicorn uvicorn是一个Python…

    Flask 2023年5月16日
    00
  • flask使用session保存登录状态及拦截未登录请求代码

    下面是“flask使用session保存登录状态及拦截未登录请求代码”的完整攻略,包含两条示例说明。 什么是Session Session 是指用户与Web应用间的一次会话,可以用来存储在整个会话过程中需要跨越请求和响应之间一直使用的数据。 在 Flask 中,可以使用 session 对象保存用户会话数据。session 对象是一个相当有用的、用于临时存储…

    Flask 2023年5月16日
    00
  • Flask配置Cors跨域的实现

    下面是关于 Flask 配置 Cors 跨域的实现的完整攻略,包括两条示例说明。 什么是 CORS? CORS(Cross-Origin Resource Sharing)是一个 W3C 标准,用于解决浏览器的同源策略(Same-origin policy)限制,允许一个网站向另一个网站发出跨域请求,从而实现跨域通信。在跨域操作中,如果访问的资源是非简单请求…

    Flask 2023年5月15日
    00
  • Flask深入了解Jinja2引擎的用法

    首先介绍一下Jinja2引擎,它是一个基于Python的模板引擎,常用于web开发中生成HTML页面。 一、Jinja2引擎的基本用法 在Flask中,可以通过实例化Jinja2对象,将其与app关联,来使用Jinja2引擎。示例代码如下: from flask import Flask, render_template from jinja2 import…

    Flask 2023年5月15日
    00
  • 在Python的Flask框架下收发电子邮件的教程

    在Python的Flask框架下收发电子邮件需要使用到Python标准库中的smtplib和email模块。 安装Flask-Mail 在开始之前,需要先安装Flask-Mail。 可以在终端中使用以下命令进行安装: pip install Flask-Mail 或者在服务器/虚拟环境中使用以下命令进行安装: sudo pip install Flask-M…

    Flask 2023年5月16日
    00
  • 详解Flask框架中Flask-Login模块的使用

    详解Flask框架中Flask-Login模块的使用 什么是Flask-Login模块 Flask-Login是一个针对Flask的第三方模块,它提供了用户密码验证和用户会话管理的功能。它允许您在Flask应用程序中轻松实现用户认证和授权系统。 Flask-Login模块的安装 在开始使用Flask-Login模块之前,您需要先安装它。你可以使用pip命令来…

    Flask 2023年5月15日
    00
  • python3 property装饰器实现原理与用法示例

    Property装饰器是Python中一个强大的工具,可以让我们在代码中访问属性值时加入更多的逻辑或者限制。本文将详细介绍Python3中property装饰器的实现原理和用法,并提供两个实例说明。 Property装饰器的实现原理 Python中的@property装饰器是一个装饰器工厂函数,它返回一个特殊的描述器对象。通过向类中添加这个描述器,我们可以控…

    Flask 2023年5月16日
    00
  • Python from import导包ModuleNotFoundError No module named找不到模块问题解决

    当我们在Python代码中使用import导入模块时,有时会遇到ModuleNotFoundError或No module named找不到模块的问题。这个问题可能由于以下原因导致: 模块名称输入错误 模块没有安装 Python环境路径设定有误 以下是详细的解决步骤和示例说明: 1. 模块名称输入错误 在Python中导入模块时,输入模块名称非常重要,任何错…

    Flask 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部