[python] Flask-WTF에서 사용자로부터 입력받은 값에 따라 필드를 동적으로 생성하는 방법은 어떻게 되나요?

Flask-WTF는 Flask를 기반으로 한 웹 응용 프로그램을 위한 폼 처리를 위한 모듈입니다. 사용자로부터 입력받은 값에 따라 필드를 동적으로 생성해야 할 때는 WTForms를 사용하면 됩니다.

아래는 Flask-WTF와 WTForms를 사용하여 동적 필드를 생성하는 예시 코드입니다.

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.fields.html5 import IntegerField
from wtforms.validators import DataRequired


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


class DynamicForm(FlaskForm):
    dynamic_fields = IntegerField('Number of Fields', validators=[DataRequired()])
    submit = SubmitField('Create Form')


@app.route('/', methods=['GET', 'POST'])
def create_dynamic_form():
    form = DynamicForm()
    if form.validate_on_submit():
        num_fields = form.dynamic_fields.data
        for i in range(num_fields):
            field_name = f'field_{i}'
            field_label = f'Field {i+1}'
            setattr(DynamicForm, field_name, StringField(field_label))
        return render_template('dynamic_form.html', form=form)

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

위의 코드에서 DynamicForm은 동적 필드를 생성할 폼 클래스입니다. IntegerField에는 사용자로부터 필드의 개수를 입력받을 수 있는 필드가 있습니다. SubmitField는 폼 생성 버튼을 나타냅니다.

create_dynamic_form 함수에서는 폼이 제출되었는지 확인하고, 폼이 제출되면 사용자로부터 입력받은 필드 개수에 따라 동적으로 필드를 생성합니다. setattr 함수를 사용하여 새로운 필드를 DynamicForm 클래스에 추가합니다.

위의 코드에서는 동적 폼을 생성한 후 render_template 함수를 사용하여 폼을 렌더링하는 템플릿을 반환합니다. create_form.html는 초기 폼을 보여주는 템플릿이고, dynamic_form.html은 동적으로 생성된 폼을 보여주는 템플릿입니다.

이 예시 코드를 실행하면 사용자로부터 필드 개수를 입력받아 동적으로 필드가 생성되는 폼을 구현할 수 있습니다.

참고 문서: