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

Flask-WTF는 Flask와 함께 사용되는 폼 처리 라이브러리입니다. Flask-WTF를 사용하여 동적으로 생성된 폼 필드의 값을 처리하는 방법에 대해 알아보겠습니다.

Flask-WTF를 사용하여 동적으로 생성된 폼 필드를 처리하려면 다음과 같은 단계를 따릅니다:

  1. 동적 필드를 생성하는 함수를 작성합니다. 이 함수는 필드를 생성하고 반환하는 역할을 합니다. 예를 들어, 다음과 같이 동적 필드를 생성하는 함수를 작성할 수 있습니다:

    def generate_dynamic_field():
        return StringField('Dynamic Field')
    
  2. 동적 필드를 포함하는 폼을 정의합니다. 이때, Meta 클래스의 dynamic_fields 속성을 추가하여 동적 필드를 저장할 수 있도록 해야합니다. 예를 들어, 다음과 같이 폼을 정의할 수 있습니다:

    class MyForm(FlaskForm):
        dynamic_fields = []
        dynamic_field_count = IntegerField('Dynamic Fields Count', validators=[NumberRange(min=0)])
    
        def add_dynamic_fields(self):
            for _ in range(self.dynamic_field_count.data):
                dynamic_field = generate_dynamic_field()
                self.dynamic_fields.append(dynamic_field)
                setattr(self, f'dynamic_field_{len(self.dynamic_fields)}', dynamic_field)
    
  3. 동적 필드를 추가하기 위한 라우트를 생성합니다. 이 라우트에서는 폼 객체를 생성하고 동적 필드를 추가하는 메소드를 호출합니다. 예를 들어, 다음과 같이 라우트를 생성할 수 있습니다:

    @app.route('/dynamic-form', methods=['GET', 'POST'])
    def dynamic_form():
        form = MyForm()
        if form.validate_on_submit():
            form.add_dynamic_fields()
            return redirect(url_for('dynamic_form'))
        return render_template('dynamic_form.html', form=form)
    
  4. HTML 템플릿에서 동적 필드를 표시합니다. 폼 객체의 dynamic_fields 속성을 사용하여 동적 필드를 순회하고 표시할 수 있습니다. 예를 들어, 다음과 같이 템플릿에서 폼을 표시할 수 있습니다:

       
    <form method="POST">
        {{ form.hidden_tag() }}
        {{ form.dynamic_field_count.label }} {{ form.dynamic_field_count }}
        {% for field in form.dynamic_fields %}
            {{ field.label }} {{ field }}
        {% endfor %}
        <input type="submit" value="Submit">
    </form>
       
    

위의 단계를 따르면 Flask-WTF를 사용하여 동적으로 생성된 폼 필드를 처리할 수 있습니다. 이러한 방법을 활용하여 자유롭게 사용자 정의 폼을 구성할 수 있습니다.

참고 자료: