[python] Flask-WTF에서 폼을 동적으로 생성할 때 필드에 따른 유효성 검사를 어떻게 할 수 있나요?
Flask-WTF는 Flask를 기반으로한 웹 애플리케이션 개발에 유용한 라이브러리입니다. 이 라이브러리를 사용하여 동적으로 폼을 생성하고 각 필드에 대한 유효성 검사를 추가할 수 있습니다.
먼저, FormField
와 FieldList
클래스를 사용하여 동적인 필드를 가지는 폼을 생성합니다. FormField
는 다른 폼 클래스의 인스턴스를 포함하는 필드를 생성하고, FieldList
는 동일한 필드를 반복해서 생성하는 필드를 생성합니다.
아래는 Flask-WTF를 사용하여 동적 폼과 필드 유효성 검사를 구현한 예제 코드입니다.
from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, IntegerField, FormField, FieldList, SubmitField
from wtforms.validators import DataRequired, Length
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret'
class DynamicForm(FlaskForm):
field1 = StringField('Field 1', validators=[DataRequired()])
field2 = IntegerField('Field 2', validators=[DataRequired(), Length(min=0, max=100)])
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 sub_form in form.dynamic_fields.data:
if not sub_form.get('field1') or not sub_form.get('field2'):
# 필수 필드가 비어있는지 확인
flash('All fields are required', 'error')
return redirect(url_for('index'))
return render_template('index.html', form=form)
if __name__ == '__main__':
app.run()
위의 코드에서 DynamicForm
클래스는 동적으로 생성되는 폼입니다. 이 폼은 field1
과 field2
라는 필드를 가지고 있으며, 각 필드에는 DataRequired
와 Length
유효성 검사가 추가되어 있습니다.
MainForm
클래스는 동적 필드를 가지는 폼입니다. dynamic_fields
필드는 DynamicForm
클래스의 인스턴스를 여러 개 가지며, FieldList
를 사용하여 동적으로 필드를 반복해서 생성합니다.
폼 제출 시 form.validate_on_submit()
메서드를 사용하여 각 동적 폼의 유효성을 검사할 수 있습니다. 필수 필드인 field1
과 field2
가 비어있는지 확인하여 유효성 검사를 수행하고, 필드가 비어있으면 적절한 오류 메시지를 표시합니다.
이제 해당 코드를 참고하여 Flask-WTF를 사용하여 동적 폼과 필드 유효성 검사를 구현할 수 있습니다.