[python] Flask-WTF에서 동적으로 생성된 폼 필드의 값을 어떻게 처리할 수 있나요?
Flask-WTF는 Flask와 함께 사용할 수 있는 폼 처리 라이브러리입니다. 폼 필드를 동적으로 생성하고 값을 처리하는 경우에는 Form
클래스에서 FieldList
나 FormField
를 사용할 수 있습니다.
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
은 동적으로 생성될 필드들을 정의하는 폼 클래스입니다. MainForm
은 FieldList
를 사용하여 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의 자세한 내용은 공식 문서를 참고하시기 바랍니다.