파이썬(Python)/Flask

파이썬 flash 사용해서 팝업창 만들기 (alert, popup, flash)

끄적끄적아무거나 2021. 5. 19. 12:16
반응형

Python Flash


Flash 사용방법

 

경고나 알람을 팝업창 형식으로 알려주기위해 flask에서 flash 라는 모듈을 사용해서 간단하게 알려준다.

 

1. python flask (Back end) 에서 flash 모듈을 import 한다.

2. secret_key를 선언하여 html (front end)와 flask 사이 flash 메세지 전달을 암호화 해준다.

3. html에서 jinja2 를 사용하여서 flask로 부터 메세지가 있다면 팝업으로 알람을 알려(alert)준다.

 


예제와 결과로 이해해보기

 

코드 - flash.py>>

from flask import Flask, request, render_template, flash, jsonify

app = Flask(__name__)
app.secret_key = '사용자지정비밀번호'

@app.route("/login", methods=["GET", "POST"])
def test():
    if request.method == "POST":
        id = request.form.get("id")
        pw = request.form.get("pw")

        if id == "":
            flash("Please Input ID")
            return render_template("login.html")
        elif pw == "":
            flash("Please Input PW")
            return render_template("login.html") 
        else:           
            return jsonify({"Login": "Completed"})
    else:
        return render_template("login.html")

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True, port=9999)

 

코드 - login.html>>

{% with messages = get_flashed_messages() %}
    {% if messages %}
        <script>
            alert("{{messages[-1]}}")
        </script>
    {% endif %}
{% endwith %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document1</title>
</head>
<body>
    <form action="/login" method="post"> 
        <p>ID : <input type="text" name="id" /></p> 
        <p>PW : <input type="password" name="pw" /></p> 
        <p><input type="submit" value="submit" /></p> 
    </form>  
</body>
</html>

 

결과화면>>

 

주석>>

앞서 설명한것과 같이 python에서 flash 를 import 하였다. 그리고 보내고 싶은 메세지는 flash에 넣어서 보냈다. 

app.secret_key 설정을 통해 비밀 번호를 설정하여 flash 메세지를 주고 받게 하였다.

 

그리고 html에서는 jinja2 문법을 사용하여 flask에서 보낸 flash 메세지를 받아서 해당 내용이 있을 경우 팝업창으로 보이게 하였다. 

 

 

 

 

반응형