[python] Flask-WTF에서 동적으로 생성된 폼 필드의 값을 어떻게 처리할 수 있나요?

Flask-WTF는 Flask와 함께 사용할 수 있는 폼 처리 라이브러리입니다. 폼 필드를 동적으로 생성하고 값을 처리하는 경우에는 Form 클래스에서 FieldListFormField를 사용할 수 있습니다.

FieldList는 동적으로 생성된 필드들의 리스트를 관리하는데 사용되며, FormField는 다른 폼을 사용하여 동적 필드를 생성하는데 사용됩니다.

예를 들어, 동적으로 생성된 텍스트 필드를 가지는 폼을 작성하고, 이를 처리하는 뷰 함수를 구현해보겠습니다.

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, FieldList, FormField, SubmitField

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


class DynamicForm(FlaskForm):
    name = StringField('Name')
    age = StringField('Age')


class MainForm(FlaskForm):
    dynamic_fields = FieldList(FormField(DynamicForm))
    submit = SubmitField('Submit')


@app.route('/', methods=['GET', 'POST'])
def index():
    form = MainForm()
    
    if form.validate_on_submit():
        for dynamic_field in form.dynamic_fields:
            print(dynamic_field.name.data, dynamic_field.age.data)
        # 여기에서 필요한 처리를 수행할 수 있습니다.
        
    return render_template('index.html', form=form)

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

위의 코드에서 DynamicForm은 동적으로 생성될 필드들을 정의하는 폼 클래스입니다. MainFormFieldList를 사용하여 DynamicForm을 동적 필드로 관리합니다. index 뷰 함수에서 폼이 제출되면 모든 동적 필드의 값을 출력하고 필요한 처리를 수행할 수 있습니다.

이제 index.html을 작성하여 폼을 렌더링할 수 있습니다.


<!-- index.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Dynamic Form Example</title>
</head>
<body>
    <h1>Dynamic Form Example</h1>
    <form method="POST" action="/">
        {{ form.csrf_token }}
        {{ form.dynamic_fields.label }}
        <br>
        {% for dynamic_field in form.dynamic_fields %}
            {{ dynamic_field.name.label }}: {{ dynamic_field.name }}
            {{ dynamic_field.age.label }}: {{ dynamic_field.age }}
            <br>
        {% endfor %}
        {{ form.submit }}
    </form>
</body>
</html>

index.html에서는 form.dynamic_fields를 반복하여 동적 필드를 렌더링하였습니다. 필요한 처리를 위한 추가적인 코드를 작성하여 동적으로 생성된 폼 필드의 값을 처리할 수 있습니다.

Flask-WTF의 자세한 내용은 공식 문서를 참고하시기 바랍니다.