3. [파이썬] Flask Message Flashing

SangWan Lee·2022년 11월 23일
0

Python 기초

목록 보기
3/3
post-thumbnail

메시지 플래싱(Message Flashing)

좋은 어플리케이션과 사용자 인터페이스의 모든것은 피드백이다. 사용자가 충분한 피드백을 얻지 못한다면 그들은 결국 그 어플리케이션을 싫어할 것이다.
플라스크는 플래싱 시스템을 가지고 사용자에게 피드백을 주는 정말 간단한 방법을 제공한다. 플래싱 시스템은 기본적으로 요청의 끝에 메시지를 기록하고 그 다음 요청에서만 그 메시지에 접근할 수 있게 한다. 보통은 플래싱을 처리하는 레이아웃 템플릿과 결함되어 사용된다.

📑 현재 연습중인 Flask 인증 테스트 코드에 간단한 예제를 넣었다.

  • Back 단에서는 원하는 메시지 출력 문구를 해당 코드 라인에 flask('피드백 내용') 을 입력해준다.

manin.py

@app.route('/register', methods=["GET", "POST"])
def register():
    if request.method == "POST":

        if User.query.filter_by(email=request.form.get('email')).first():
            # User already exists
            flash("이미 등록된 이메일입니다, 다른 이메일을 사용해주세요.")
            return redirect(url_for('login'))

        hash_and_salted_password = generate_password_hash(
            request.form.get('password'),
            method='pbkdf2:sha256',
            salt_length=8
        )
        new_user = User(
            email=request.form.get('email'),
            name=request.form.get('name'),
            password=hash_and_salted_password,
        )
        db.session.add(new_user)
        db.session.commit()

        # Log in and authenticate user after adding details to database.
        login_user(new_user)

        return redirect(url_for("secrets"))
    return render_template("register.html")


@app.route('/login', methods=["GET", "POST"])
def login():
    if request.method == "POST":
        email = request.form.get('email')
        password = request.form.get('password')

        # Find user by email entered.
        user = User.query.filter_by(email=email).first()
        if user is None:
            flash("해당 이메일은 등록되지 않은 이메일입니다.")
            return redirect(url_for("login"))

        elif not check_password_hash(user.password, password):
            flash('비밀번호가 틀렸습니다, 다시 확인후 입력해주세요.')
            return redirect(url_for('login'))
            # Email exists and password correct
        else:
            login_user(user)
            return redirect(url_for('secrets'))

    return render_template("login.html")
  • Front 단에선는 피드백 메시지가 출력될 곳에 아래와 같이 구현한다.

login.html

{% extends "base.html" %}
{% block content %}

    <div class="box">
        <h1>Login</h1>
        {% with messages = get_flashed_messages() %}
            {% if messages %}
                {% for message in messages %}
                    <p>{{ message }}</p>
                {% endfor %}
            {% endif %}
        {% endwith %}
        <form action="{{ url_for('login') }}" method="post">
            <input type="text" name="email" placeholder="Email" required="required"/>
            <input type="password" name="password" placeholder="Password" required="required"/>
            <button type="submit" class="btn btn-primary btn-block btn-large">Let me in.</button>
        </form>
    </div>

{% endblock %}

참조 문서
Flask Flashing Message Docs Link

profile
'기록되지 않으면 기억되지 않는다. '

0개의 댓글