[python] Flask-WTF에서 폼을 전송할 때 추가적인 데이터를 함께 전달하는 방법은 어떻게 되나요?

우선, Flask-WTF의 FormField를 사용하여 특정 폼을 생성하고 화면에 표시할 수 있습니다. 그리고 이 전체 폼을 다른 폼에 포함시키고 싶은 경우에는 hidden field를 이용하여 추가적인 데이터를 전달할 수 있습니다. 이 숨겨진 필드는 클라이언트에게 표시되지 않지만 서버에 전송됩니다.

아래는 Flask-WTF를 사용하여 폼을 생성하고 추가적인 데이터를 함께 전달하는 예제입니다.


from flask import Flask, render_template_string
from flask_wtf import FlaskForm, FormField
from wtforms import StringField, SubmitField

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'

class SubForm(FlaskForm):
    data = StringField('Data')
    submit = SubmitField('Submit')

class MainForm(FlaskForm):
    sub_form = FormField(SubForm)
    additional_data = StringField('Additional Data')
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
def index():
    form = MainForm()
    if form.validate_on_submit():
        # 폼이 제출되었을 때 추가적인 데이터 가져오기
        additional_data = form.additional_data.data
        sub_form_data = form.sub_form.data['data']
        # 추가 작업 수행
        # ...
        return 'Form submitted successfully.'
    return render_template_string("""
        <form method="POST">
            {{ form.csrf_token }}
            {{ form.sub_form.hidden_tag() }}
            {{ form.additional_data.label }} {{ form.additional_data() }}
            {{ form.sub_form.data.label }} {{ form.sub_form.data() }}
            {{ form.submit() }}
        </form>
    """, form=form)

if __name__ == '__main__':
    app.run()

이 예제에서는 SubFormMainForm 두 개의 폼을 정의합니다. MainForm에는 additional_data 필드와 sub_form 필드가 있습니다. sub_form 필드는 SubForm 폼을 포함하고 있으며, FlaskForm을 상속하는 모든 폼 객체를 포함할 수 있습니다.

index 뷰 함수에서는 MainForm을 생성하고, 폼이 제출되면 추가적인 데이터와 sub_form 폼의 데이터를 가져와서 사용할 수 있습니다.

템플릿에서 폼을 표시할 때 숨겨진 필드를 포함시키기 위해 sub_form.hidden_tag()를 사용합니다.

이 예제를 실행하면 / 경로에서 폼을 보여주고, 추가적인 데이터와 함께 폼을 제출할 수 있습니다.

이런 식으로 Flask-WTF를 사용하여 폼을 제출할 때 추가적인 데이터를 전달할 수 있습니다. 이 기능을 사용하면 사용자 정의 필드를 통해 현재 사용자 또는 세션 정보와 같은 추가 데이터를 전달할 수 있습니다.