Python + Flask - 신원확인을 시켜주자(Database 연동).

앞서 Elasticsearch 와의 연동을 통해서 데이터를 보여준바 있다.

이번에는 너무나도 전형적인 로그인 폼을 이용해 사용자의 등록 여부를 확인해 본다.

 

사용자의 ID와 PASSWROD를 입력하게 한 뒤 ... 1)

Database에 데이터 등록 여부를 확인 한 후 ... 2)

있다면 : 로그인 정보 확인 후 성공/실패 여부를 알려주고, ... 3)

없다면: 가입하자! ... 4)

 

위의 4가지 경우를 로직으로 구현하는 것은 매우 간단한 일이다.

이 블로그에서 설명하려는 것은 그런 로직이 아니라 파이썬 Flask 를 이용해서

어떤 Application 으로 확장을 할 수 있는 가능성을 열어보기 위함이다.

 

기초지식이 필요하다면 Python.org 에서 Document를 통해서 하는것이 가장 확실한 방법이다.

 

가장 첫번째로, 서버를 돌려야 한다.

앞서 설명한 서버로직을 그대로 사용하겠다.

 

route 는 이렇게 명시할 생각이다.

 

로그인 페이지 : '/login'

로그인 정보 확인 : '/login_validation'

가입 페이지 : '/regist'

 

아! 간단하 로그인은 MySQL 이라는 관계형 DB 를 사용할 것이다.

설치는 Google 검색을 통해서 쉽게 알 수 있을 것이다.

 

파이썬 Flask 는 MySQL 과의 연동을 쉽게 도와주기 위한 모듈을 제공한다.

 

아... 너무 간단해서 글을 읽는 도중에 질려서 실망할까 걱정이다.

 

로그인 form 화면부터 만들어 보자.

 

 

매우 간단한 로그인 정보 입력 화면이다.자신의 Email 주소와 Password를 입력한다.

 

하지만! 어짜피 아무것도 등록되어 있지 않으므로...

아래와 같은 Error 메시지가 발생되도록 하였다.

 

그래서! Register here 라는 링크를 통해 가입을 시도한다. (URL의 파라미터가 바뀐다.)

 

그런데... 만약 중복되는 Email 이 등록된다면 큰 일이 벌어질 수 있다.

Email 은 main key 값이 되어야 하므로 유일값으로 존재해야 한다.

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

그러므로 가입 시, email 중복체크 로직을 통해서 확인이 필요하다.

 

아래는 중복되는 email 이 입력된 상황에서의 서버측 응답이다.

 

 

아래는 가입을 성공적으로 마쳤을 경우 나타나는 화면이다.

 

그렇다면 파이썬 Flask 서버 측에서의 코드를 보면서 위의 시나리오를 생각해보자.

 

@app.route('/login', methods=['post', 'get'])
def login():
    error = None
    if request.method == 'POST':
       
        email = request.form['email']
        pw = request.form['pw']
       
        conn = mysql.connect(host='localhost', user='root', passwd='admin', db='python', charset='utf8')
        cursor = conn.cursor()
        
        query = "SELECT user_name FROM user_table WHERE user_email = %s AND user_pw = %s"
        value = (email, pw)
        cursor.execute("set names utf8")
        cursor.execute(query, value)
        data = (cursor.fetchall())
       
        cursor.close()
        conn.close()
       
        for row in data:
            data = row[0]

       
        if data:
            print 'login success'
            return redirect(url_for('success', name=data))
        else:
            error = 'Invalid input data detected!'
           
        #return redirect(url_for('success', name=user))
   
    return render_template('python_login.html', error=error)

 

위 코드에서는 매우 중요한 사실이 하나 있다. 바로 MySQL 에서 값을 가져 왔을 때!

tuple 형식으로 값을 가져오기 때문에 이것을 풀어주지 않으면 Unicode 형태의 값으로 보여진다.

 

무튼... 위의 코드는 로그인을 처리하는 로직이다.

 

@app.route('/regist', methods=['post', 'get'])
def regist():
    error = None
    if request.method == 'POST':
       
        name = request.form['name']
        email = request.form['email']
        pw = request.form['pw']
       
        print name, email, pw
       
        conn = mysql.connect(host='localhost', user='root', passwd='admin', db='python', charset='utf8')
        cursor = conn.cursor()
       
        query = "SELECT 1 FROM user_table WHERE user_email = '%s' " % (email)
        #value = (email)
        cursor.execute(query)
        data = cursor.fetchall()
       
        if data:
            print 'user other email'
            error = "The email is already used. please use another one"
        else:
            print 'use it okay'
            query = "INSERT INTO user_table (user_name, user_email, user_pw) values (%s, %s, %s)"
            value = (name, email, pw)
            cursor.execute(query, value)
            data = cursor.fetchall()
            print data
            if not data:
                conn.commit()
                print data
                return "Register Success"
            else:
                conn.rollback()
                print data
                return "Register Failed"
       
       
        cursor.close()
        conn.close()

    return render_template('python_regist.html', error=error)

 

위의 코드에서는 등록을 하기위한 로직이다.

Email 의 중복여부를 확인하는 로직이 포함되어 있다.

 

코드가 조금씩 길어지기 시작한다. Naver의 블로그 에디터는 코드를 넣기에는 좋지 않은 것 같다.

앞으로는 풀코드를 파일로 등록할 생각이다.

 

로그인과 가입을 성공적으로 마쳤다.

 

이제 등록한 email 과 password로 로그인을 했을 때 화면을 보자.

 



 

완성이다.

 

다음에는 사용자에게 새로운 서비스를 시작 할 계획이다.

바로 email을 보낼 수 있는 기능을 만들어 보려고 한다.

 

자신의 이름으로 메일이 보내 질 것이며 보내는 사람의 email 주소와 내용, 파일 등을 함께 보내는

기능을 만들어 본다.

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
15 [python 데이터분석] [jupyter] 주피터 노트북에 이미지 삽입 file 졸리운_곰 2025.09.06 526
14 [python 데이터분석] [Python] Streamlit 사용법 (python 데이터분석 웹 만들기) file 졸리운_곰 2024.12.22 462
13 [python 데이터분석] Anaconda : Error while loading conda entry point: conda-libmamba-solver (libarchive.so.19: cannot open shared object file: No such file or directory) 졸리운_곰 2024.12.14 520
12 [python 데이터분석] Anaconda | Conda update 반영 안됨(update 후에도 버전 변경 없음) file 졸리운_곰 2024.11.18 431
11 [python 데이터분석] Keeping Anaconda Up To Date 졸리운_곰 2024.05.30 552
10 [python 데이터 분석] 국내 경제 100대 통계지표 졸리운_곰 2024.02.18 672
9 [python 데이터 분석] Python 에서 R언어 패키지 호출 : Calling R From Python With rpy2 file 졸리운_곰 2024.01.28 676
8 [python 데이터 분석] 파이썬을 활용한 코스피, 달러 환율정보 수집부터 차트 시각화까지 file 졸리운_곰 2023.12.11 735
7 [Python 데이터분석][pandas] [Python pandas] DataFrame의 문자열 칼럼을 숫자형으로 바꾸기 : pd.to_numeric(), DataFrame.astype() file 졸리운_곰 2023.12.09 357
6 [Python 데이터분석] [Python 환경설정] VS code 설치 및 Anaconda와 연동하기 file 졸리운_곰 2023.03.17 527
5 [Python 데이터분석][python 데이터분석 프로덕션] [Python] Docker를 사용한 Dash 웹앱 생성 file 졸리운_곰 2021.12.10 403
4 [Python 데이터분석] [pandas] 공공데이터(csv) 활용시 한글 깨짐 현상 해결 file 졸리운_곰 2021.09.30 592
3 [Python 데이터분석] 공공데이터포털::공휴일 데이터 조회 (REST API) file 졸리운_곰 2021.09.30 358
2 [Python 데이터 분석] pandas의 to_csv()를 사용해서 csv 파일로 저장하기(save 하기) 졸리운_곰 2021.09.29 603
1 [Python 데이터 분석] 데이터 과학을 단순하게 만드는 3가지 Python 패키지 file 졸리운_곰 2021.09.24 513
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED