首頁 >後端開發 >Python教學 >Flask-WTF:將表單新增至Flask應用程式

Flask-WTF:將表單新增至Flask應用程式

WBOY
WBOY原創
2023-06-17 21:50:56977瀏覽

Flask-WTF是一個Python包,旨在簡化使用表單的Flask框架應用程式。它提供了一個簡單而強大的介面,可以輕鬆地將表單添加到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衍生而來的。在表單類別中,可以定義表單欄位、驗證器和其他屬性。以下是一些基本的表單欄位類型:

  • 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字段是一個隱藏字段,用於防止跨站點請求偽造攻擊。

總結

使用Flask-WTF,可以輕鬆地將表單新增至Flask應用程式。使用表單類,可以建立自訂表單欄位和驗證器。在視圖函數中,可以建立表單實例,並使用範本引擎渲染表單。 Flask-WTF還提供了其他功能,例如檔案上傳、表單巢狀和表單預處理。了解Flask-WTF的功能,可以使Flask應用程式的表單處理更加簡單和有效率。

以上是Flask-WTF:將表單新增至Flask應用程式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn