[python] Flask-WTF에서 폼을 동적으로 생성할 때 필드에 따라 유효성 검사를 적용하는 방법은 어떻게 되나요?

먼저, 폼을 동적으로 생성하기 위해 필요한 필드들을 변수로 정의합니다. 이 변수들은 폼 클래스에서 필드로 사용될 것입니다. 예를 들어, 사용자의 이름, 이메일 주소 등을 동적으로 생성하고 각 필드에 알맞는 유효성 검사를 적용하고 싶다면, 다음과 같이 변수를 선언할 수 있습니다.

from wtforms import StringField, EmailField
from wtforms.validators import DataRequired, Email

이제 폼 클래스를 생성하고 필드들을 동적으로 추가합니다. 이때, 필드들의 유효성 검사를 설정해야 합니다. 필드에 따라 다른 유효성 검사를 할 수 있습니다. 예를 들어, 이름 필드에는 데이터가 입력되어야 하고, 이메일 필드에는 올바른 이메일 주소 형식이어야 한다고 가정해봅시다.

from flask_wtf import FlaskForm

class MyForm(FlaskForm):
    def __init__(self, fields):
        super(MyForm, self).__init__()
        for field in fields:
            if field == 'name':
                self.name = StringField('Name', validators=[DataRequired()])
            elif field == 'email':
                self.email = EmailField('Email', validators=[DataRequired(), Email()])

이렇게 설정된 폼 클래스를 라우트에서 사용하여 동적으로 폼을 생성할 수 있습니다. 필요한 필드를 갖는 리스트를 생성한 후, 이를 폼 클래스의 생성자에 전달하여 폼을 생성합니다.

from flask import Flask, render_template, request
from flask_wtf import FlaskForm

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

@app.route('/', methods=['GET', 'POST'])
def index():
    fields = ['name', 'email']
    form = MyForm(fields=fields)

    if form.validate_on_submit():
        # 폼이 제출되고 유효성 검사를 통과한 경우 실행될 코드
        name = form.name.data
        email = fomr.email.data
        # 추가적인 로직 처리

    return render_template('index.html', form=form)

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

위 예제에서는 ‘name’ 필드와 ‘email’ 필드를 사용하여 폼을 동적으로 생성하였고, 각 필드에 적절한 유효성 검사를 적용하였습니다. render_template 함수를 통해 폼을 템플릿에 렌더링하고, 폼이 제출되고 유효성 검사를 통과한 경우에는 해당 데이터를 사용하여 추가적인 로직을 처리할 수 있습니다.

이와 같은 방법을 사용하여 Flask-WTF에서 폼을 동적으로 생성하고 필드에 따라 다른 유효성 검사를 적용할 수 있습니다.