티스토리 뷰

728x90

예제로 만들었던 로그인을 소스를 아이디와 패스워드를 DB에 저장 하는 것을 만들어 봅니다.

번호, 이름을 넣는 예제를 변경해서 만듭니다.

 

DB 에 저장된 데이터를 가져와 ID, PW를 비교 후 맞으면 로그인 성공 메시지를 보내고 /form 으로 이동이 되게 만들어 봅니다.  만약 로그인을 하지 않으면 /form 에는 접근이 안되게 해야 합니다. 로그인 된 사용자만 접근이 되게 할려면 세션(session)을 이용 해야 합니다.

Flask 에서 세션을 사용 하기위해 설정 값으로

app.secret_key 의 값을 줘야 합니다. app.secret_key='임의의 값' 으로 줍니다.

저는 이렇게 선언 했습니다.

app.secret_key = b'aaa!111/'

 

그리고 로그인 부분에 만약 아이디와 패스워드가 같다면 로그인 성공이겠죠. 로그인 성공 했다면

session['user'] = id

소스는 다음과 같이 작성할 수 있습니다. 바로 리다이렉트 시켜도 되지만 알림을 띄우고 이동 되게 만들었습니다.

# 로그인
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        id = request.form['id']
        pw = request.form['pw']
        # id와 pw가 임의로 정한 값이랑 비교 해서 맞으면 맞다 틀리면 틀리다
        if id == 'abc' and pw == '1234':
            session['user'] = id
            return '''
                <script> alert("안녕하세요~ {}님");
                location.href="/form"
                </script>
            '''.format(id)
            # return redirect(url_for('form'))
        else:
            return "아이디 또는 패스워드를 확인 하세요."

세션을 만들어 주고 form 으로 페이지를 이동해서 접근 가능 하게 만들어 줍니다. 이때 form 소스는 세션 값을 체크 해서 없으면 로그인 페이지로 세션의 값이 있으면 form 화면을 보여 주게 만듭니다.

if 'user' in session:

이렇게 체크를 합니다.

# 로그인 사용자만 접근 가능으로 만들면
@app.route('/form')
def form():
    if 'user' in session:
        return render_template('test.html')
    return redirect(url_for('login'))

잘되는지 확인 해봅니다. 세션에 값이 계속 남아 있게 되면 form에는 언제든지 접근이 가능 하겠죠?

로그인이 있으면 로그아웃도 있어야 합니다.

세션의 값을 지우게 되면 로그아웃이 됩니다. 로그아웃 후 form으로 리다이렉트 시키고 리다이렉트 된 form에서는 로그인이 되지 않은 상태이기 때문에 login 화면으로 또 페이지를 이동 하게 되겠네요.

아래는 로그아웃 소스 입니다.

@app.route('/logout')
def logout():
    session.pop('user', None)
    return redirect(url_for('form'))

다시 한번 얘기 하지만 여기서는 html 디자인에 대해서는 다루지 않았습니다. 사이트를 이쁘게 꾸미는 것은 html, css 영역이므로 자세히 다루지는 않고 현재 작성되고 있는 웹앱 프로그래밍 글 마지막 즈음에 부트스트랩을 이용해 페이지를 간단하게 꾸며 볼 예정입니다.

 

로그인 적용한 전체 소스 입니다.

from flask import Flask, request, render_template, redirect, url_for, abort, session
import dbdb

app = Flask(__name__)

app.secret_key = b'aaa!111/'

@app.route('/')
def index():
    return '메인페이지'

# 로그인
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        id = request.form['id']
        pw = request.form['pw']
        # id와 pw가 임의로 정한 값이랑 비교 해서 맞으면 맞다 틀리면 틀리다
        if id == 'abc' and pw == '1234':
            session['user'] = id
            return '''
                <script> alert("안녕하세요~ {}님");
                location.href="/form"
                </script>
            '''.format(id)
        else:
            return "아이디 또는 패스워드를 확인 하세요."

# 로그아웃(session 제거)
@app.route('/logout')
def logout():
    session.pop('user', None)
    return redirect(url_for('form'))

# 로그인 사용자만 접근 가능으로 만들면
@app.route('/form')
def form():
    if 'user' in session:
        return render_template('test.html')
    return redirect(url_for('login'))

@app.route('/method', methods=['GET', 'POST'])
def method():
    if request.method == 'GET':
        return 'GET 으로 전송이다.'
    else:
        num = request.form["num"]
        name = request.form["name"]
        return 'POST 이다. 학번은: {} 이름은: {}'.format(num, name)

if __name__ == '__main__':
    app.run(debug=True)
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함