[python] Flask-WTF란 무엇인가요?

Flask-WTF를 사용하면 HTML 폼을 생성하기 위해 HTML 코드를 작성할 필요가 없습니다. 대신 파이썬 클래스로 폼을 정의하고 각 필드의 유효성 검사 규칙을 지정할 수 있습니다. 이 클래스를 사용하여 폼을 생성하고 렌더링하면 자동으로 적절한 HTML 코드가 생성됩니다.

Flask-WTF는 CSRF(Cross-Site Request Forgery) 공격을 방지하기 위한 기능도 제공합니다. CSRF 공격은 악의적인 웹사이트에서 사용자의 권한을 도용하여 다른 웹사이트에 요청을 보내는 공격입니다. Flask-WTF는 웹 폼에 CSRF 토큰을 추가하여 이러한 공격을 방어합니다.

Flask-WTF를 사용하기 위해 flask-wtf 패키지를 설치해야 합니다. 다음은 Flask-WTF를 사용하는 간단한 예제 코드입니다.

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'

class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        # 폼이 제출되었을 때 실행되는 코드
        username = form.username.data
        password = form.password.data
        # 로그인 로직 수행
        return f'Logged in as {username}'

    return render_template('login.html', form=form)

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

이 예제에서는 로그인 폼을 정의하기 위해 LoginForm 클래스를 사용하고, StringFieldPasswordField로 필드를 생성합니다. 각 필드에는 DataRequired 유효성 검사 규칙을 추가하여 사용자가 필드를 비워둘 수 없도록 합니다. SubmitField는 폼을 제출하는 버튼을 생성합니다.

login 라우트 함수에서는 LoginForm을 인스턴스화 하여 폼을 생성합니다. 폼이 제출되었을 때 validate_on_submit() 메서드를 사용하여 데이터의 유효성을 검사하고, 유효한 경우 로그인 로직을 수행합니다.

이 예제는 간단한 Flask-WTF의 사용 예시로, 더 복잡한 폼과 유효성 검사 규칙을 추가할 수 있습니다. Flask-WTF에 대한 자세한 사용법은 공식 문서를 참조하시기 바랍니다.