[python] Flask-WTF에서 사용자가 입력한 값을 저장하고 기록하는 방법은 어떻게 되나요?

Flask-WTF는 Flask 프레임워크에서 사용되는 WTForms와의 통합을 제공하는 확장입니다. 사용자로부터 입력을 받는 웹 폼을 만들고, 이 입력 값을 저장하고 기록하는 방법에 대해서 알아보겠습니다.

먼저, Flask-WTF를 설치해야 합니다. 터미널에서 아래의 명령을 실행하여 Flask-WTF를 설치할 수 있습니다:

pip install Flask-WTF

다음으로, Flask-WTF에서 제공하는 FlaskForm 클래스를 상속받아 사용자 정의 폼 클래스를 작성합니다. 이 폼 클래스에는 사용자로부터 입력 받을 필드들을 추가하고, 이들 필드의 값을 저장하는 로직을 구현할 수 있습니다.

예를 들어, 사용자로부터 이름과 이메일을 입력받는 폼을 만들고, 입력 받은 값을 데이터베이스에 저장하고 기록하는 로직을 작성해보겠습니다.

from flask import Flask, render_template, redirect
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
from flask_sqlalchemy import SQLAlchemy

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

db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), nullable=False)
    email = db.Column(db.String(100), nullable=False)

class UserForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])
    email = StringField('Email', validators=[DataRequired()])
    submit = SubmitField('Submit')

@app.route('/', methods=['GET', 'POST'])
def index():
    form = UserForm()
    if form.validate_on_submit():
        user = User(name=form.name.data, email=form.email.data)
        db.session.add(user)
        db.session.commit()
        return redirect('/success')
    return render_template('index.html', form=form)

@app.route('/success')
def success():
    users = User.query.all()
    return render_template('success.html', users=users)

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

위의 코드에서는 FlaskForm을 상속받아 UserForm 클래스를 작성하고, nameemail 필드를 추가했습니다. 그리고 폼이 제출되면 index 함수에서 User 모델에 새로운 사용자를 추가하고, 데이터베이스에 반영한 뒤 /success 경로로 리다이렉트합니다. /success 경로에서는 데이터베이스의 모든 사용자를 조회하여 success.html 템플릿에 표시합니다.

위의 코드에서 your_secret_keyyour_database_uri를 실제로 사용하는 키와 URI로 변경해 주어야 합니다.

이와 같은 방식으로 Flask-WTF를 사용하여 사용자로부터 입력 값을 저장하고 기록할 수 있습니다. 추가적인 필드나 로직을 구현하려면 Flask-WTF와 SQLAlchemy의 문서를 참고하시면 도움이 될 것입니다.

참고 자료: