Flask wtforms实现表单验证使用

yizhihongxing

下面是详细的“Flask wtforms实现表单验证使用”的攻略:

一、前置知识

在使用 Flask wtforms 实现表单验证前,需要了解以下知识:

  1. Flask:Python Web 应用框架,提供了一个模块化的方式组织 Web 应用程序。

  2. Flask wtforms:基于 Flask 的表单验证扩展,可以方便地进行表单验证。

  3. HTML 表单:Web 表单,包含需要提交的数据(例如文本框、下拉框、单选框等)和提交表单的方式(GET 或 POST)。

二、安装 Flask wtforms

使用 pip 安装 Flask wtforms:

pip install flask-wtf

三、实现表单验证

下面是实现 Flask 表单验证的详细步骤:

1. 创建 Flask 应用程序和表单验证代码

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

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

class ExampleForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    email = StringField('Email', validators=[DataRequired()])
    submit = SubmitField('Submit')

FlaskForm 是 wtforms 扩展提供的基类,用于创建表单。在 ExampleForm 类中,定义了表单的 nameemail 字段,以及一个提交按钮(submit)。

其中,DataRequired 是 wtforms 提供的验证器,用于判断表单字段是否为空。

2. 创建视图函数

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

index 视图函数用于处理 GET 和 POST 请求。在函数中,创建了 ExampleForm 实例(form),并且通过 if form.validate_on_submit() 判断当前请求是否是 POST 请求并且表单验证成功。

如果表单验证成功,将获取到表单字段的值并且返回一个页面,给用户一个反馈。

3. 创建模板文件

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Example Form</title>
</head>
<body>
  <form method="POST">
    {{ form.name.label }}<br>
    {{ form.name }}<br>
    {{ form.email.label }}<br>
    {{ form.email }}<br>
    {{ form.submit }}<br>
  </form>
</body>
</html>

使用 HTML form 标签包含表单元素和提交按钮,并且在表单元素的前面显示标签文本。

4. 启动应用程序

if __name__ == '__main__':
    app.run()

四、示例一

1. 表单验证

在表单字段上定义验证器,用于验证表单是否合法,例如:

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired(), Length(min=8)])
    remember_me = BooleanField('Remember Me')
    submit = SubmitField('Sign In')

DataRequired 用于验证重要字段的填写情况,Length(min=8) 用于验证密码长度是否至少为8位。

2. 实现表单提交

在视图函数中实现表单提交的逻辑:

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        flash(f'Login requested for user {form.username.data}, remember_me={form.remember_me.data}')
        return redirect('/index')
    return render_template('login.html', title='Sign In', form=form)

如果表单验证通过,即可在服务器端执行登录逻辑,并重定向到某个页面。

3. 创建模板文件

创建 login.html 模板文件用于显示表单:

{% extends "base.html" %}

{% block content %}
  <h1>{{ title }}</h1>
  <form action="" method="post">
    {{ form.hidden_tag() }}
    <p>
        {{ form.username.label }}<br>
        {{ form.username(size=32) }}
    </p>
    <p>
        {{ form.password.label }}<br>
        {{ form.password(size=32) }}
    </p>
    <p>{{ form.remember_me() }} {{ form.remember_me.label }}</p>
    <p>{{ form.submit() }}</p>
  </form>
{% endblock %}

在模板文件中,使用 Flask wtforms 提供的 form.[fieldname] 属性获取表单字段,并且使用 HTML 标签显示表单。同时在 form.action 属性中设置表单提交的 URL。

五、示例二:使用 FieldList 显示重复的表单字段

有时候需要在表单中显示重复的表单字段,例如:

class AddressForm(FlaskForm):
    street = StringField('Street', validators=[DataRequired()])
    city = StringField('City', validators=[DataRequired()])
    state = StringField('State', validators=[DataRequired()])
    zip_code = StringField('Zip Code', validators=[DataRequired(), Length(min=5, max=10)])

可以使用 FieldList 来实现表单字段的重复,例如:

class ProfileForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    addresses = FieldList(FormField(AddressForm), min_entries=1)
    submit = SubmitField('Save')

ProfileForm 中,使用 FormFieldFieldList 来实现重复输入地址的功能。min_entries 可以定义用户至少需要输入的地址数量。

在视图函数中,在处理 POST 数据之前,可先根据表单提交的地址数量检测地址数量是否符合要求,例如:

@app.route('/profile', methods=['GET', 'POST'])
def profile():
    form = ProfileForm()
    if form.validate_on_submit():
        if len(form.addresses) < 2:
            flash('Please enter at least two addresses.')
            return redirect('/profile')

        flash('Profile updated.')
        return redirect('/index')
    return render_template('profile.html', title='Profile', form=form)

在模板文件中,可以使用以下代码来渲染一个 ProfileForm 表单示例:

{% extends "base.html" %}

{% block content %}
  <h1>{{ title }}</h1>
  <form action="" method="post">
    {{ form.hidden_tag() }}
    <p>
        {{ form.name.label }}<br>
        {{ form.name(size=32) }}
    </p>
    <h2>Addresses</h2>
    <ul>
      {% for address in form.addresses %}
      <li>
        {{ address.street(size=32) }}
        {{ address.city(size=32) }}
        {{ address.state(size=32) }}
        {{ address.zip_code(size=32) }}
      </li>
      {% endfor %}
    </ul>
    <p>{{ form.submit() }}</p>
  </form>
{% endblock %}

以上就是 Flask wtforms 实现表单验证的详细攻略,包括了两个示例供读者参考。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask wtforms实现表单验证使用 - Python技术站

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

相关文章

  • Flask框架搭建虚拟环境的步骤分析

    下面是“Flask框架搭建虚拟环境的步骤分析”的完整攻略。 步骤1:安装虚拟环境工具 虚拟环境工具可以帮助我们在同一台机器上管理多个 Python 项目所需的不同 Python 环境、包依赖、库版本等。这里推荐使用 virtualenv 工具。 安装 virtualenv 的命令如下: pip install virtualenv 安装成功后可以验证一下: …

    Flask 2023年5月15日
    00
  • Python Type Hints 学习之从入门到实践

    下面是详细讲解“Python Type Hints 学习之从入门到实践”的完整攻略: Python Type Hints 学习之从入门到实践 什么是 Python Type Hints Python 从 3.5 版本开始引入了 Type Hints 的概念,它是一种用于标注函数、变量、类等对象类型的注释。Python 并不会在运行时对其进行强制校验,但是可以…

    Flask 2023年5月16日
    00
  • python框架flask表单实现详解

    下面我就为您详细讲解“Python框架Flask表单实现详解”的完整攻略,包含两条示例说明。 1. 安装Flask框架 在开始使用Flask框架之前,需要先安装Flask框架。使用以下命令可以完成安装: pip install flask 2. 创建Flask应用并定义表单 在导入Flask框架后,我们需要创建一个Flask应用,并定义表单。首先要导入需要用…

    Flask 2023年5月15日
    00
  • 详解 Flask 消息闪现方法

    Flask 消息闪现是指将一条消息存储到 session 中,然后在下个 HTTP 请求中进行显示,然后立即从 session 中删除这条消息。这在用户注册、登录、注销等场景下非常有用。 本文将为大家详细介绍 Flask 消息闪现的完整攻略,包括以下内容: 创建 Flask 应用 添加消息闪现功能 在模板中显示闪现消息 在视图函数中设置闪现消息 完整示例代码…

    Flask 2023年3月13日
    00
  • python-Web-flask-视图内容和模板知识点西宁街

    下面就针对“python-Web-flask-视图内容和模板知识点西宁街”的完整攻略进行详细讲解,其中包含两个示例说明。 标题 1. 概述 Flask 是一个轻量级 Web 开发框架,其在视图与模板的处理方面有独特的设计思想和使用方法。 视图(View)是一种用于处理请求并返回响应的函数或方法,而模板(Template)则是一种静态文件,用于构建动态生成的 …

    Flask 2023年5月15日
    00
  • 详解Flask前后端分离项目案例

    接下来我将详细讲解“详解Flask前后端分离项目案例”的完整攻略,过程中将包含两条示例说明,具体内容如下: 一、 项目概述 1、背景介绍 在许多Web应用程序中,我们经常面临一个问题:如何将前端UI和后端逻辑分离? 从开发角度来看,这意味着我们需要使用一种框架来创建前端UI,使用另一种框架来处理后端逻辑。 在这种情况下,我们通常采用一种叫做“前后端分离”的方…

    Flask 2023年5月15日
    00
  • 使用Python的Flask框架实现视频的流媒体传输

    使用Python的Flask框架实现视频的流媒体传输可以分为以下步骤: 1. 安装依赖 在开始之前,请确保安装了Flask、OpenCV和FFmpeg库。 2. 准备样例视频 为了演示如何使用Flask实现视频的流媒体传输,需要一个样例视频。你可以从互联网上下载一个视频,例如https://sample-videos.com/video123/mp4/720…

    Flask 2023年5月16日
    00
  • python学习开发mock接口

    Python学习开发Mock接口 在进行前后端项目开发中,前后端联调过程中可能会出现前后端开发进度不一致或者依赖的接口尚未完成等问题,导致耗费大量时间等问题。这时可以使用Mock接口的技术手段,在后端接口未完成的情况下,模拟数据返回从而达到开发目的。 本篇攻略将介绍Python Mock接口的开发,并包含两个示例说明。 准备工作 安装Python开发环境 本…

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