Flask-WTF表单的使用方法

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日

相关文章

  • Vue+Flask实现简单的登录验证跳转的示例代码

    下面是“Vue+Flask实现简单的登录验证跳转的示例代码”的完整攻略,包含两个示例说明。 示例一 前端部分(Vue) 在前端部分,我们需要使用 axios 进行登录请求。登录成功后我们将会在 cookie 中存储 token,以便随后的访问都可以带上该 token。 <template> <form> <input v-mod…

    Flask 2023年5月16日
    00
  • Python + Flask 实现简单的验证码系统

    下面是关于“Python + Flask 实现简单的验证码系统”的完整攻略。 简介 验证码是一种用于区分人类用户和计算机程序的图像识别技术。在Web应用程序中,验证码被广泛地应用于注册、登录等需要用户提交信息的场景中,以保证提交表单的用户是真实的人类用户而不是自动化程序。本文将介绍如何使用Python语言和Flask框架实现一个简单的验证码系统。 环境设置 …

    Flask 2023年5月15日
    00
  • Flask框架响应、调度方法和蓝图操作实例分析

    Flask是一款基于Werkzeug和Jinja2的轻量级Web框架,具有优雅简洁的代码风格、灵活性和可扩展性。在Flask框架中,响应、调度方法和蓝图操作是非常关键的内容,下面我们将对这三个方面进行详细讲解,并分别给出两个实例进行说明。 Flask框架响应 在Flask框架中,响应是指服务器返回给客户端的数据,Flask框架内置了多种响应类型,如HTML页…

    Flask 2023年5月15日
    00
  • 如何使用Cython对python代码进行加密

    使用Cython对Python代码进行加密,通常是通过将Python代码编译为Cython模块,该模块可以加密并保护您的Python代码。下面我们来一步步了解如何使用Cython对Python代码进行加密。 第一步: 安装Cython 在开始使用Cython编译Python代码之前,您需要先安装Cython。您可以使用pip来安装Cython,可以在命令行界…

    Flask 2023年5月16日
    00
  • Flaks基础之在URL中添加变量的实现详解

    下面我将详细讲解“Flask基础之在URL中添加变量的实现详解”的攻略,主要包括以下内容: 1. 如何在Flask中添加URL变量 在Flask中,我们可以在URL中通过添加变量来动态地生成不同的URL。具体实现方式是将需要带入变量的部分用尖括号(<>)包含起来,例如: @app.route(‘/user/<username>’) d…

    Flask 2023年5月16日
    00
  • Python单元测试的9个技巧技巧

    以下是关于“Python单元测试的9个技巧”的完整攻略。 1. 了解单元测试的概念 单元测试是指对程序的最小可测试模块进行验证性测试,这个模块可以是函数、类、方法的一部分或者整个模块。因为它是针对最小可测试模块的测试,所以它可以识别出代码质量的问题,增强代码的可维护性。 2. 使用assert语句进行检验 在Python中,如果测试表达式为False,将会抛…

    Flask 2023年5月15日
    00
  • 基于CentOS搭建Python Django环境过程解析

    下面就是关于如何基于CentOS搭建Python Django环境的完整攻略,包含了两条具体的示例说明。 准备工作 在开始之前,我们需要安装一些必要的软件,包括Python、pip、virtualenv和git等,这可以通过以下命令来完成: sudo yum install python3 python3-pip python3-devel git sudo…

    Flask 2023年5月15日
    00
  • 基于Python Dash库制作酷炫的可视化大屏

    下面是基于Python Dash库制作可视化大屏的完整攻略,分为以下几步: 步骤一:安装Dash库 在Python环境中,安装Dash库可使用以下命令: pip install dash==1.21.0 步骤二:创建Dash应用 导入Dash库中的必要模块: import dash import dash_html_components as html im…

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