반응형
* 본 포스팅은 한국품질재단 취업지원센터에서 주최하는 혁신성장 청년인재 집중 양성사업(인공지능)에서 학습한 내용을 포스팅합니다.
https://kks2140501.tistory.com/6
※ 심화 과정에 대한 포스팅
목표 : 로그인 환경 구현
- 준비
- Python
- Maria DB
- AdminLTE 3.1.0(로그인 환경 이미지)
1. mariadb 다운로드
2. 비밀번호 설정
주의 사항) 설치 시 체크박스 두 개 모두 체크 아니면 원격 접속 불가!!
- mariadb를 사용하여 테이블 생성 및 데이터 입력
- 테이블 생성 sql 문
# 테이블 생성
- 회원 테이블
CREATE TABLE `users_tbl` (
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '내부관리ID',
`uid` VARCHAR(64) NOT NULL COMMENT '회원ID' COLLATE 'utf8_general_ci',
`upw` VARCHAR(64) NOT NULL COMMENT '회원PW' COLLATE 'utf8_general_ci',
`name` VARCHAR(64) NOT NULL COMMENT '회원이름' COLLATE 'utf8_general_ci',
`regdate` TIMESTAMP NOT NULL DEFAULT current_timestamp() COMMENT '가입일',
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `uid` (`uid`) USING BTREE
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
- 회원 가입
INSERT INTO
`python_db`.`users_tbl`
(`uid`, `upw`, `name`)
VALUES
('guest', '1', '게스트');
INSERT INTO
users_tbl (uid, upw, name)
VALUES
('guest', '1', '게스트');
- 로그인 처리
SELECT
*
FROM
users_tbl
WHERE
uid='guest'
AND
upw='1';
- mysql을 파이썬에서 사용할 수 있는 라이브러리 PyMySQL사용
https://pypi.org/project/PyMySQL/
- 접속 후 코드의 일부분만 가져온다
connection = pymysql.connect(host='localhost',
user='user',
password='passwd',
database='db',
cursorclass=pymysql.cursors.DictCursor)
- pymysql라이브러리를 사용하여 DB연동
import pymysql as my
def selectUsers(uid, upw):
row = None # 쿼리 결과
connection = None
try:
connection = my.connect(host = 'localhost',
user = 'root',
password = '1234',
database = 'python_db',
cursorclass= my.cursors.DictCursor
)
cursor = connection.cursor()
sql = '''
SELECT
*
FROM
users_tbl
WHERE
uid=%s
AND
upw=%s;
'''
# 어떤 계정이든 조회가능하게 일반화했다, 확장성을 높였다
cursor.execute( sql, ( uid, upw ) )
row = cursor.fetchone()
#print( row )
except Exception as e:
print('접속오류', e)
finally:
if connection:
connection.close()
print('종료')
# 결과 리턴
return row
if __name__ == '__main__':
# 회원 테스트
row = selectUsers( 'guest', '1' )
print( '회원조회결과:', row )
# 비회원 테스트 (회원이 아님, 비번이 틀림, 아이디 틀림)
row = selectUsers( 'guest', '2' )
print( '회원조회결과:', row )
# MVC 모델로 웹, M:모델/디비, V:뷰/화면/화면, C:비즈니스로직/커맨드
# 쿼리만 수행하고, 결과만 돌려준다. 그 의미는 판단하지 않는다
# 함수화, 기능 테스트
# 회원이면 dict 형태로 전달(리턴)
# 회원 아니면 None으로 전달(리턴)
- 로그인 시 회원 판별
from flask import Flask, request, render_template, redirect
from db import selectUsers
app = Flask(__name__)
@app.route('/')
def home():
return render_template( 'index.html' )
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'GET':
return render_template( 'login.html' )
else:
uid = request.form.get('uid')
upw = request.form.get('upw')
print( uid, upw )
# 2. 아이디, 비번을 가지고 데이터베이스에 쿼리를 수행 (사전에 이미 가입이 되어 있어야 한다)
# 3. 수행결과를 받는다
row = selectUsers( uid, upw )
if row:
# 4. 회원이면 => 서비스 페이지 이동 -> 리다이렉트
return redirect('/')
else:
# 5. 회원 아니면 => 아이디 혹은 비번이 틀립니다. => 로그인 화면으로 리턴
return '''
<script>
// 경고창
alert("로그인 실패. 다시 시도하세요")
// 이전페이지로 이동
history.back()
</script>
'''
if __name__ == '__main__':
app.run( debug=True )
- 모듈 받아오기
- from 패키지, 패키지... 모듈 import 변수, 함수, 클래스, *
- from 패키지, 패키지... 패키지 import 변수, 함수, 클래스, *
- selectUsers()
- import 패키지, 패키지... 모듈 as 별칭
- 별칭.selsectUsers()
- import 패키지, 패키지... 패키지 as 별칭
위의 코드는 from 패키지 import 함수 사용
패키지는 위의 pymysql라이브러리를 사용하여 DB 연동을 가리킨다
- 여기서 home() 화면은 AdminLTE 3.1.0을 활용하여 로그인 화면을 디자인하였다
https://github.com/ColorlibHQ/AdminLTE/releases
다운로드한 파일을 넣고 그중에 index.html을 사용
= URL : http://127.0.0.1:5000/ 의 화면
= 로그인 화면
= 틀린 정보 입력 시
= 데이터베이스에 있는 로그인 정보를 올바르게 입력했을 시
- 다시 홈 화면으로 돌아가게 된다.
반응형
'파이썬' 카테고리의 다른 글
[파이썬] 파이썬(flask)기반 웹 프로그래밍 공부하기 3 (2) | 2021.06.10 |
---|---|
[파이썬] 파이썬(flask)기반 웹 프로그래밍 공부하기 2 (0) | 2021.06.10 |
[파이썬] 파이썬(flask)기반 웹 프로그래밍 공부하기 1 (2) | 2021.06.09 |
[파이썬] 파이썬으로 pandas 모듈 공부하기 (2) | 2021.06.02 |
[파이썬] 파이썬으로 웹 크롤링 공부하기 (0) | 2021.05.31 |
댓글