[python] Flask-WTF에서 입력 폼의 템플릿을 커스터마이징하는 방법은 어떻게 되나요?

Flask-WTF는 Flask 프레임워크에서 폼을 구현하고 처리하는 데 사용되는 강력한 라이브러리입니다. Flask-WTF를 사용하면 간단하게 사용자 입력을 처리하는 폼을 만들 수 있습니다. 이 때, 입력 폼의 템플릿을 커스터마이징하여 원하는대로 디자인할 수 있습니다.

Flask-WTF에서 입력 폼의 템플릿을 커스터마이징하는 방법은 다음과 같습니다:

  1. Flask-WTF를 설치합니다. 다음 명령어를 사용하여 설치할 수 있습니다:
    pip install Flask-WTF
    
  2. Flask-WTF의 Form 클래스를 상속하여 커스텀 폼 클래스를 생성합니다. 이 클래스는 입력 폼의 필드와 유효성 검사 로직을 정의합니다. 예를 들어, 다음과 같이 커스텀 폼 클래스를 생성할 수 있습니다:
    from flask_wtf import FlaskForm
    from wtforms import StringField, SubmitField
    from wtforms.validators import DataRequired
    
    class MyForm(FlaskForm):
        name = StringField('Name', validators=[DataRequired()])
        email = StringField('Email', validators=[DataRequired()])
        submit = SubmitField('Submit')
    
  3. 커스텀 폼 클래스를 사용하여 뷰 함수에서 폼 인스턴스를 생성합니다. 이 때, 커스텀 폼 클래스의 인스턴스를 생성하면 입력 폼의 템플릿이 렌더링됩니다. 예를 들어, 다음과 같이 폼 인스턴스를 생성할 수 있습니다:
    from flask import Flask, render_template, redirect, url_for
    from myforms import MyForm
    
    app = Flask(__name__)
    app.config['SECRET_KEY'] = 'your-secret-key'
    
    @app.route('/', methods=['GET', 'POST'])
    def index():
        form = MyForm()
        if form.validate_on_submit():
            # 폼이 제출되었을 때 실행할 코드
            return redirect(url_for('success'))
        return render_template('index.html', form=form)
    
    @app.route('/success')
    def success():
        return 'Form submitted successfully!'
    
    if __name__ == '__main__':
        app.run()
    
  4. 템플릿 파일을 생성하고 커스터마이징합니다. Flask-WTF는 Jinja2 템플릿 엔진을 사용하므로, Jinja2의 문법을 사용하여 템플릿 파일을 작성할 수 있습니다. 예를 들어, 다음과 같이 index.html 파일을 작성할 수 있습니다:
       
    <form method="POST" action="{{ url_for('index') }}">
      {{ form.csrf_token }}
      {{ form.name.label }} {{ form.name }}<br>
      {{ form.email.label }} {{ form.email }}<br>
      {{ form.submit }}<br>
    </form>
       
    

위와 같이 커스텀 폼 클래스를 작성하고, 뷰 함수에서 폼 인스턴스를 생성하여 템플릿 파일에 렌더링하면 Flask-WTF에서 입력 폼의 템플릿을 커스터마이징할 수 있습니다. 이를 통해 원하는대로 입력 폼의 디자인을 변경하거나 추가적인 요구사항을 구현할 수 있습니다.

더 자세한 내용은 Flask-WTF 공식 문서를 참고하시기 바랍니다.