[python] Flask-WTF에서 사용자가 입력한 값을 활용하여 동적으로 다른 필드를 생성하는 방법은 어떻게 되나요?

Flask-WTF는 Flask 프레임워크와 함께 사용되는 폼 처리 확장 라이브러리입니다. 사용자가 입력한 값을 활용하여 동적으로 다른 필드를 생성하는 경우, WTForms 라이브러리의 기능을 활용할 수 있습니다.

다음은 Flask-WTF에서 사용자가 입력한 값을 기반으로 동적 필드를 생성하는 예제 코드입니다:

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

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

class DynamicForm(FlaskForm):
    field_name = StringField('Field Name', validators=[DataRequired()])
    submit = SubmitField('Create Field')

@app.route('/', methods=['GET', 'POST'])
def create_dynamic_field():
    form = DynamicForm()

    if form.validate_on_submit():
        field_name = form.field_name.data
        # 필드를 동적으로 생성 또는 조작하는 로직을 작성합니다.
        # 예를 들어, 필드를 동적으로 생성하기 위해 필드 이름을 사용하여 새로운 StringField를 추가합니다.
        setattr(DynamicForm, field_name, StringField(field_name, validators=[DataRequired()]))

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

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

위의 예제 코드에서는 / URL에 GETPOST 메서드로 접근할 수 있습니다. / URL에 접근하면 field_name 필드와 Create Field 제출 버튼이 있는 폼이 표시됩니다.

사용자가 필드 이름을 입력하고 제출 버튼을 클릭하면 create_dynamic_field 함수가 호출됩니다. 해당 함수에서는 사용자가 입력한 필드 이름을 가져오고, 이를 사용하여 DynamicForm 클래스의 동적 속성으로 새로운 StringField를 추가합니다. 필드를 동적으로 생성하는 방식은 setattr() 함수를 사용하여 클래스에 동적으로 속성을 추가하는 것입니다.

위의 코드는 DynamicForm 클래스에 동적으로 필드를 추가하는 예제입니다. 필요에 따라 이를 확장하고 로직을 추가하여 동적 필드를 생성하도록 코드를 수정할 수 있습니다.