>백엔드 개발 >파이썬 튜토리얼 >Flask-WTF: Flask 애플리케이션에 양식 추가

Flask-WTF: Flask 애플리케이션에 양식 추가

WBOY
WBOY원래의
2023-06-17 21:50:56972검색

Flask-WTF는 양식을 사용하여 Flask 프레임워크 애플리케이션을 단순화하도록 설계된 Python 패키지입니다. Flask 애플리케이션에 양식을 쉽게 추가할 수 있는 간단하면서도 강력한 인터페이스를 제공합니다. Flask-WTF를 사용하면 양식 데이터를 쉽게 검증 및 처리하고 사용자 정의 유효성 검사기와 필드를 양식에 추가할 수 있습니다. 이 기사에서는 Flask-WTF를 사용하여 Flask 애플리케이션에 양식을 추가하는 방법을 소개합니다.

Flask-WTF 설치

먼저 Flask-WTF 패키지를 설치해야 합니다. pip를 사용하여 설치할 수 있습니다.

pip install Flask-WTF

Flask 애플리케이션 만들기

양식 추가를 시작하기 전에 Flask 애플리케이션을 만들어야 합니다. 다음은 간단한 Flask 애플리케이션의 예입니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World!'

더 복잡한 애플리케이션의 경우 더 많은 구성과 설정이 필요할 수 있습니다.

양식 클래스 만들기

Flask-WTF는 양식 클래스를 사용하여 양식 필드를 설명합니다. 양식 클래스는 Flask-WTF에서 제공되는 FlaskForm 클래스에서 파생됩니다. 양식 클래스에서는 양식 필드, 유효성 검사기 및 기타 속성을 정의할 수 있습니다. 다음은 몇 가지 기본 양식 필드 유형입니다. FlaskForm派生而来的。在表单类中,可以定义表单字段、验证器和其他属性。以下是一些基本的表单字段类型:

  • StringField:用于输入字符串。
  • IntegerField:用于输入整数。
  • BooleanField:用于输入布尔值(复选框)。
  • TextAreaField:用于输入多行文本。
  • SelectField:用于选择下拉菜单中的选项。
  • RadioField:用于单选按钮。
  • FileField:用于上传文件。

以下是一个简单的表单类示例:

from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

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

在上面的示例中,表单类NameForm包含一个名称为name的字符串字段和一个名称为submit的提交按钮。字符串字段使用StringField类型和DataRequired验证器定义。DataRequired验证器确保字段值不为空。

在表单类中,还可以定义自定义验证器。例如,以下是一个自定义验证器,确保用户输入的值低于50个字符:

from wtforms import ValidationError

class LengthValidator(object):
    def __init__(self, max_chars):
        self.max_chars = max_chars

    def __call__(self, form, field):
        if len(field.data) > self.max_chars:
            raise ValidationError('Value must be less than {} characters'.format(self.max_chars))

class NameForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired(), LengthValidator(50)])
    submit = SubmitField('Submit')

在上面的示例中,定义了一个验证器LengthValidator。该验证器使用一个最大长度参数初始化,并检查输入字段的长度是否超过了最大长度。在字符串字段定义中,将LengthValidator验证器添加到验证器列表中,以确保其属性值低于50个字符。

在表单类中,还可以定义其他属性,例如渲染字段时使用的CSS类。这些属性可以用来自定义表单字段的外观和感觉。

使用表单

要在Flask应用程序中使用表单,需要在视图函数中创建表单实例。可以从表单类中创建表单实例,并将其传递给模板。以下是视图函数的示例:

from flask import render_template
from app import app
from forms import NameForm

@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        name = form.name.data
        return render_template('index.html', name=name)
    return render_template('index.html', form=form)

在上面的示例中,视图函数index创建了表单实例form。如果表单已提交,并且验证成功,则从提交表单中获取名称并将其传递给模板。如果表单尚未提交或验证失败,则显示表单。

在模板中,可以使用Flask-WTF提供的表单渲染函数来呈现表单。以下是一个简单的模板示例,使用Jinja2模板引擎和Bootstrap样式:

<!doctype html>
<html>
  <head>
    <title>Flask-WTF Example</title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.3/css/bootstrap.min.css">
  </head>
  <body>
    <div class="container">
      <h1>Hello {{ name }}!</h1>
      <form method="post">
        {{ form.csrf_token }}
        {{ form.name.label }}
        {{ form.name }}
        {% for error in form.name.errors %}
          <span>{{ error }}</span>
        {% endfor %}
        {{ form.submit }}
      </form>
    </div>
  </body>
</html>

在模板中,使用form对象渲染表单字段和提交按钮。csrf_token

  • StringField: 문자열을 입력하는 데 사용됩니다.
  • IntegerField: 정수를 입력하는 데 사용됩니다.
  • BooleanField: 부울 값(체크박스)을 입력하는 데 사용됩니다.
  • TextAreaField: 여러 줄의 텍스트를 입력하는 데 사용됩니다.
  • SelectField: 드롭다운 메뉴에서 옵션을 선택하는 데 사용됩니다.
  • RadioField: 라디오 버튼에 사용됩니다.
  • FileField: 파일을 업로드하는 데 사용됩니다.
다음은 간단한 양식 클래스 예입니다.

rrreee

위 예에서 양식 클래스 NameForm에는 이름 name이 포함되어 있습니다. 문자열 필드 제출이라는 제출 버튼이 있습니다. 문자열 필드는 StringField 유형과 DataRequired 유효성 검사기를 사용하여 정의됩니다. DataRequired 유효성 검사기는 필드 값이 비어 있지 않은지 확인합니다.

양식 클래스에서 사용자 정의 유효성 검사기를 정의할 수도 있습니다. 예를 들어, 다음은 사용자가 입력한 값이 50자 미만인지 확인하는 사용자 정의 유효성 검사기입니다. 🎜rrreee🎜 위 예에서는 유효성 검사기 LengthValidator가 정의됩니다. 유효성 검사기는 최대 길이 매개 변수로 초기화되어 입력 필드의 길이가 최대 길이를 초과하는지 확인합니다. 문자열 필드 정의에서 LengthValidator 유효성 검사기를 유효성 검사기 목록에 추가하여 속성 값이 50자 미만인지 확인하세요. 🎜🎜양식 클래스에서는 필드를 렌더링할 때 사용할 CSS 클래스와 같은 다른 속성을 정의할 수도 있습니다. 이러한 속성을 사용하여 양식 필드의 모양과 느낌을 사용자 정의할 수 있습니다. 🎜🎜양식 사용하기🎜🎜Flask 애플리케이션에서 양식을 사용하려면 보기 기능에서 양식 인스턴스를 만들어야 합니다. 양식 인스턴스는 양식 클래스에서 생성되어 템플릿에 전달될 수 있습니다. 다음은 보기 함수의 예입니다. 🎜rrreee🎜위의 예에서 보기 함수 indexform 양식 인스턴스를 생성합니다. 양식이 제출되고 유효성 검사에 성공하면 제출된 양식에서 이름을 가져와 템플릿에 전달합니다. 양식이 제출되지 않았거나 유효성 검사에 실패한 경우 양식을 표시합니다. 🎜🎜템플릿에서는 Flask-WTF에서 제공하는 양식 렌더링 기능을 사용하여 양식을 렌더링할 수 있습니다. 다음은 Jinja2 템플릿 엔진과 Bootstrap 스타일을 사용하는 간단한 템플릿 예입니다. 🎜rrreee🎜템플릿에서 form 개체를 사용하여 양식 필드와 제출 버튼을 렌더링합니다. csrf_token 필드는 교차 사이트 요청 위조 공격을 방지하는 데 사용되는 숨겨진 필드입니다. 🎜🎜요약🎜🎜Flask-WTF를 사용하면 Flask 애플리케이션에 양식을 쉽게 추가할 수 있습니다. 양식 클래스를 사용하면 사용자 정의 양식 필드와 유효성 검사기를 만들 수 있습니다. 보기 기능에서는 양식 인스턴스를 생성하고 템플릿 엔진을 사용하여 양식을 렌더링할 수 있습니다. Flask-WTF는 파일 업로드, 양식 중첩 및 양식 전처리와 같은 다른 기능도 제공합니다. Flask-WTF의 기능을 이해하면 Flask 애플리케이션의 양식 처리를 더 간단하고 효율적으로 만들 수 있습니다. 🎜

위 내용은 Flask-WTF: Flask 애플리케이션에 양식 추가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.