import pymysql
#테이블값 저장
class MemVo:
def __init__(self, id=None, pwd=None, name=None, email=None):
self.id = id
self.pwd = pwd
self.name = name
self.email = email
def __str__(self):
return 'id:'+self.id+' / pwd:'+self.pwd+' / name:'+self.name+' / email:'+self.email
class MemDao:#member 테이블과 관련된 db 작업만 구현
def __init__(self):
self.conn = None #커넥션 객체 담을 멤버 변수
#db연결함수. db 사용전 로그인하는 작업을 수행
def connect(self):
self.conn = pymysql.connect(host='localhost', user='root', password='1234', db='encore', charset='utf8')
#db 닫는 함수
def disconnect(self):
self.conn.close()
def insert(self, vo):#member 테이블에 한 줄 추가. 회원가입 정보를 저장
self.connect() #db 연결
cur = self.conn.cursor() #사용할 커서 객체 생성
#insert into member values(vo.id, vo.pwd, vo.name, vo.email)
sql = "insert into member values(%s, %s, %s, %s)" #변수가 들어갈 위치에 %s와 같은 포맷문자 지정
vals = (vo.id, vo.pwd, vo.name, vo.email)
cur.execute(sql, vals)
self.conn.commit()
self.disconnect()
def select(self, id):
self.connect() # db 연결
cur = self.conn.cursor() # 사용할 커서 객체 생성
sql = "select * from member where id=%s" # 변수가 들어갈 위치에 %s와 같은 포맷문자 지정
vals = (id,)
cur.execute(sql, vals) #쿼리 실행. 검색 결과가 cur에 저장
row = cur.fetchone() #cur 객체에서 검색된 한 줄 fetch. 검색 결과 없으면 None반환
self.disconnect() #db 닫음
if row!=None: #검색된 결과가 있으면
vo = MemVo(row[0], row[1], row[2], row[3])#id, pwd, name, email
return vo
def update(self, id, new_pwd):
self.connect() # db 연결
cur = self.conn.cursor() # 사용할 커서 객체 생성
sql = "update member set pwd=%s where id=%s" # 변수가 들어갈 위치에 %s와 같은 포맷문자 지정
vals = (new_pwd, id)
cur.execute(sql, vals)
self.conn.commit()
self.disconnect()
def delete(self, id):
self.connect() # db 연결
cur = self.conn.cursor() # 사용할 커서 객체 생성
sql = "delete from member where id=%s" # 변수가 들어갈 위치에 %s와 같은 포맷문자 지정
vals = (id,)
cur.execute(sql, vals)
self.conn.commit()
self.disconnect()
class MemService:#제공할 기능 구현
'''
로그인 상태 유지 => 로그인함수에서 처리한 아이디를 어딘가 보관 =>
로그인함수(): id, pwd를 입력받아서 db에 일치하는가 확인. 로그인 성공.
기억상실처리 => MemService.login_id에 로그인 성공한 id를 저장. 로그아웃할때까지 유지
MemService.login_id:None => 로그아웃 상태
MemService.login_id:'aaa' => 'aaa'로 로그인 상태
내정보확인 메뉴선택:
'''
login_id = None #로그인한 사람의 id보관. None이면 로그인 안된 상태
def __init__(self):
self.dao = MemDao() #대부분 기능이 db작업 필요. db작업 전담하는 dao객체를 멤버변수로 생성
def join(self): #회원가입 기능
print('회원가입')
id = input('id:')
pwd = input('pwd:')
name = input('name:')
email = input('email:')
try:
vo = MemVo(id, pwd, name, email)
self.dao.insert(vo)#db에 id, pwd, name, email 저장
except Exception as e:
print(e)
else:
print('회원가입완료')
def login(self):#로그인 기능
print('로그인')
if MemService.login_id != None: #로그인 상태
print('이미 로그인 중')
return
id = input('id:')
pwd = input('pwd:')
vo = self.dao.select(id) #입력한 id로 검색
if vo == None: #검색 결과 없음
print('없는 아이디')
else:
if pwd == vo.pwd: #입력한 pwd와 vo에 담긴 pwd가 일치. 로그인 성공
print('로그인 성공')
MemService.login_id = id #로그인상태 유지
else:
print('패스워드 불일치')
def logout(self):
print('로그아웃')
if MemService.login_id == None:#로그인 상태 확인
print('로그인 먼저 해라')
return
MemService.login_id = None #로그아웃 상태
def printMyInfo(self):#내정보확인기능
print('내정보확인')
if MemService.login_id == None:#로그인 상태 확인
print('로그인 먼저 해라')
return
vo = self.dao.select(MemService.login_id)#로그인한 사람의 id를 select(id)에 담아 호출하면 로그인한 id정보 검색
print(vo)
def editMyInfo(self):#MemService.login_id로 새 pwd입력받아서 수정
print('내정보수정')
if MemService.login_id == None:#로그인 상태 확인
print('로그인 먼저 해라')
return
new_pwd = input('새 pwd:')
self.dao.update(MemService.login_id, new_pwd)
def delMyInfo(self):#MemService.login_id로 삭제
print('탈퇴')
if MemService.login_id == None:
print('로그인 먼저 해라')
return
self.dao.delete(MemService.login_id)#db에서 id가 동일한 행 삭제
MemService.login_id = None #로그아웃 처리
'파이썬이 제일 쉽다면서요' 카테고리의 다른 글
python + #버스 정보 APP (1) (0) | 2021.07.12 |
---|---|
python+Mysql #회원 관리 프로그램(2) Menu,Main (0) | 2021.06.21 |
python+MySQL #DB 연결 (0) | 2021.06.21 |
python #접근제어 Private (0) | 2021.06.14 |
python #연습문제. 포켓몬 게임 (0) | 2021.06.14 |