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 주소와 내용, 파일 등을 함께 보내는

기능을 만들어 본다.

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
24 [파이썬으로 구현한 알고리즘] (4) 버블 정렬(Bubble Sort) file 졸리운_곰 2018.02.27 679
23 [파이썬으로 구현한 알고리즘] (3) 선택 정렬(Selection Sort) file 졸리운_곰 2018.02.27 549
22 [파이썬으로 구현한 알고리즘] (2) 스택/큐 (Stack/Queue) file 졸리운_곰 2018.02.27 607
21 [파이썬으로 구현한 알고리즘] (1) 연결 리스트(Linked List) file 졸리운_곰 2018.02.27 946
20 텍스트 마이닝 4편. 형태소 분석(1/3) 졸리운_곰 2018.02.18 2013
19 텍스트 마이닝 3편. 형태소 분석 사전작업 졸리운_곰 2018.02.18 761
18 텍스트 마이닝 2편. 텍스트 파일 file 졸리운_곰 2018.02.18 1199
17 텍스트 마이닝 1편. 소개 file 졸리운_곰 2018.02.18 913
16 파이썬으로 MySQL DB에 데이터 저장하기, Python handles transactions with MySQL file 졸리운_곰 2018.02.14 469
15 공공 데이터 csv 파일로 저장하기 [3] 졸리운_곰 2017.10.10 663
14 공공 데이터 csv 파일로 저장하기 [2] 졸리운_곰 2017.10.10 559
13 공공 데이터 csv 파일로 저장하기 [1] 졸리운_곰 2017.10.10 517
12 JSON 데이타 가을의곰 2017.06.18 595
11 python으로 json 파일 쉽게 파싱하기 가을의곰 2017.06.18 779
10 Python에서 SQLAlchemy로 MS-SQL 연동하기 졸리운_곰 2017.05.07 439
9 python에서 sqlite 사용법 file 졸리운_곰 2017.04.26 876
8 Python의 pandas를 사용하면 몇줄의 코드만으로 Data Analysis를 쉽고 강력하게 처리할 수 있다 file 졸리운_곰 2017.03.05 648
7 파이썬으로 XML 처리하기 졸리운_곰 2016.11.15 388
6 SQLAlchemy 시작하기 졸리운_곰 2016.06.11 948
5 SQLAlchemy 시작하기 – Part 2 졸리운_곰 2016.06.11 539
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED