기록과 정리의 공간

[Flask] 메시지 플래싱(Message Flashing) 본문

라이브러리&프레임워크/Flask

[Flask] 메시지 플래싱(Message Flashing)

딸기맛도나쓰 2020. 8. 7. 20:04

1. 메시지 플래싱(Message Flashing)

  • 플래싱 시스템은 기본적으로 요청의 끝에 메시지를 기록하고 그 다음 요청에서만 그 메시지에 접근할 수 있게 한다. 보통은 플래싱을 처리하는 레이아웃 템플릿과 결합되어 사용된다. (참고 링크)

2. flask.flash() / flask.get_flashed_messages()

  • (API문서 링크)

  • 메세지를 flash 하기 위하여 flash() 메소드를 사용하고 메세지를 가져오기 위하여 템플릿에서 사용할 수 있는 get_flashed_messages() 메소드를 사용할 수 있다. (참고 링크)

  • 예제 코드

    • 메시지 플래싱 기능을 사용하기 위해서는 SECRET_KEY를 반드시 설정해줘야 한다.
    • 파이썬코드에서 flash()에 원하는 메시지를 인자로 넘겨준다.
    • test.html(템플릿)에서 jinja의 with구문(링크-ctrl+f로 with statement검색)을 사용해 get_flashed_messages()로 메시지를 가져온다. 가져온 메시지는 복수개라는 점을 기억해두자.
from flask import Flask
from flask import request
from flask import render_template
from flask import flash

app = Flask(__name__)
app.secret_key = 'some_secret'


@app.route("/test", methods=["GET", "POST"])
def test():
    if request.method == "POST":
        name = request.form.get("name", type=str)

        if name == "":
            flash("이름을 입력하세요!")
            return render_template("test.html")
        return "제출 완료"
    else:
        return render_template("test.html")


if __name__ == "__main__":
    app.run(debug=True)
# test.html

{% with messages = get_flashed_messages() %}
    {% if messages %}
        <script>
            alert("{{messages[-1]}}")
        </script>
    {% endif %}
{% endwith %}
<table>
    <form name="form" action="/test" method="POST">
        <tbody>
            <tr>
                <td>이름</td>
                <td><input type="text" name="name"></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="제출"></td>
            </tr>
        </tbody>
    </form>
</table>
Comments