[python] Flask-WTF에서 동적으로 생성된 폼 필드의 값을 어떻게 처리할 수 있나요?
Flask-WTF는 Flask와 함께 사용되는 폼 처리 라이브러리입니다. Flask-WTF를 사용하여 동적으로 생성된 폼 필드의 값을 처리하는 방법에 대해 알아보겠습니다.
Flask-WTF를 사용하여 동적으로 생성된 폼 필드를 처리하려면 다음과 같은 단계를 따릅니다:
-
동적 필드를 생성하는 함수를 작성합니다. 이 함수는 필드를 생성하고 반환하는 역할을 합니다. 예를 들어, 다음과 같이 동적 필드를 생성하는 함수를 작성할 수 있습니다:
def generate_dynamic_field(): return StringField('Dynamic Field')
-
동적 필드를 포함하는 폼을 정의합니다. 이때, 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)
-
동적 필드를 추가하기 위한 라우트를 생성합니다. 이 라우트에서는 폼 객체를 생성하고 동적 필드를 추가하는 메소드를 호출합니다. 예를 들어, 다음과 같이 라우트를 생성할 수 있습니다:
@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)
-
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를 사용하여 동적으로 생성된 폼 필드를 처리할 수 있습니다. 이러한 방법을 활용하여 자유롭게 사용자 정의 폼을 구성할 수 있습니다.
참고 자료: