[python] Flask-WTF에서 폼을 검증하기 전에 전처리를 수행하는 방법은 어떻게 되나요?
  1. 커스텀 필드 사용하기: Flask-WTF는 커스텀 필드를 만들어서 폼의 데이터를 처리할 수 있도록 지원합니다. 커스텀 필드를 생성하려면 Field 클래스를 상속한 후 process_formdata 메서드를 오버라이드하여 전처리 로직을 구현하면 됩니다. 전처리된 데이터는 data 속성에 저장되어 폼의 검증 단계에서 사용됩니다. 아래는 전처리 로직을 추가한 커스텀 필드의 예제입니다.
from wtforms import StringField, SubmitField
from wtforms.validators import InputRequired
from flask_wtf import FlaskForm

class CustomField(StringField):
    def process_formdata(self, valuelist):
        if valuelist:
            self.data = valuelist[0].strip().upper()
        else:
            self.data = ''

class MyForm(FlaskForm):
    name = CustomField('Name', validators=[InputRequired()])
    submit = SubmitField('Submit')

위의 예제에서 CustomField는 공백을 제거하고 대문자로 변환하는 전처리 로직을 포함하고 있습니다.

  1. 폼 클래스에서 메서드 오버라이드하기: Flask-WTF에서는 폼 클래스 자체에서 메서드를 오버라이드하여 전처리 로직을 추가할 수도 있습니다. 아래는 process_formdata 메서드를 오버라이드하여 폼 데이터를 전처리하는 예제입니다.
from wtforms import StringField, SubmitField
from wtforms.validators import InputRequired
from flask_wtf import FlaskForm

class MyForm(FlaskForm):
    name = StringField('Name', validators=[InputRequired()])

    def process_formdata(self):
        if self.name.data:
            self.name.data = self.name.data.strip().upper()

    def validate(self):
        if not super(MyForm, self).validate():
            return False
        
        # 추가적인 검증 로직 수행

        return True

위의 예제에서 process_formdata 메서드에서는 name 필드를 전처리하여 공백을 제거하고 대문자로 변환합니다. validate 메서드에서는 필요한 추가적인 검증 로직을 수행할 수 있습니다.

이렇게 Flask-WTF를 사용하면 폼 데이터를 검증하기 전에 원하는 전처리 작업을 수행할 수 있습니다.