[python] Flask-WTF에서 폼 요소들을 그룹으로 묶어 표현하는 방법은 어떻게 되나요?

Flask-WTF는 Flask를 위한 WTForms 통합 확장입니다. WTForms는 웹 양식을 만들고 처리하는 데 도움이 되는 파이썬 라이브러리입니다. Flask-WTF를 사용하여 웹 양식을 만들 때, 폼 요소들을 그룹으로 묶어서 표현하는 방법이 있습니다.

폼 요소들을 그룹으로 묶는 가장 간단한 방법은 FormFieldFieldList를 사용하는 것입니다. FormField는 다른 폼을 하위 폼으로 포함시킬 때 사용되며, FieldList는 동적인 프론트엔드 부가 입력을 관리하는 도구입니다.

다음은 FormField를 사용하여 폼 요소들을 그룹으로 묶는 예시 코드입니다.

from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField
from wtforms.validators import DataRequired
from wtforms.form import Form

class AddressForm(Form):
    street = StringField('Street', validators=[DataRequired()])
    city = StringField('City', validators=[DataRequired()])
    postal_code = IntegerField('Postal Code', validators=[DataRequired()])

class UserForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    address = FormField(AddressForm)

위의 코드에서 AddressForm은 주소를 입력하기 위한 폼이며, UserForm은 사용자의 이름과 해당 사용자의 주소를 입력하는 폼입니다. UserForm에는 address 필드가 있으며, 이 필드는 AddressForm의 인스턴스를 가집니다. 이렇게 하면 사용자 폼과 주소 폼이 그룹으로 묶여 표현되게 됩니다.

FieldList를 사용하여 동적인 폼 요소 그룹을 만들 수도 있습니다. 예를 들어, 여러 개의 이메일 주소를 입력하는 폼을 만들 때 사용할 수 있습니다. 아래는 FieldList를 사용한 예시 코드입니다.

from flask_wtf import FlaskForm
from wtforms import StringField, FieldList
from wtforms.validators import DataRequired

class EmailForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired()])

class UserForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    emails = FieldList(FormField(EmailForm))

위의 코드에서 EmailForm은 이메일을 입력하기 위한 폼이며, UserForm에는 emails 필드가 있습니다. emails 필드는 EmailForm의 인스턴스를 여러 개 가질 수 있도록 FieldList로 묶여 있습니다. 이렇게 하면 사용자 폼에 동적으로 이메일 폼을 추가할 수 있게 됩니다.

Flask-WTF를 사용하여 폼 요소들을 그룹으로 묶는 방법에 대해 간단하게 알아보았습니다. 이를 통해 더 복잡한 웹 양식을 만들고 관리할 수 있습니다. Flask-WTF와 WTForms의 공식 문서를 참조하면 더 자세한 내용을 확인할 수 있습니다.