개인적인 용도로 Pyautogui와 PyQt5를 이용해 프로그램을 만들었다.
개인적으로 만족도가 상당히 높아서 마케팅 진행하시는 분들께 구동영상을 보여드렸더니 반응이 꽤 괜찮아서 '이 프로그램을 판매해도 괜찮겠는데?' 생각이 들고 판매를 시작했다.
비용을 받고 판매를 하자니 배포된 프로그램은 파일만 있으면 누구나 접근이 가능했기 때문에 그나마 보안적으로 어떻게 해결을 해야할까 싶었다. 결국 생각해낸 방법은 로그인 방식이다.
일단 PyQt5라는 모듈을 사용하며 로그인하는 창이랑 알고리즘을 만들어 본 적이 없어 해외자료들을 많이 참고해서 만들었다.
START
일단 제일 먼저 qt designer 라는 툴을 이용해서 Label, PushButton, EditLine 이 세 요소만을 이용해서 간단하게 구실만 갖춘 로그인창을 제작했다. (디자인적인 요소는 전혀 생각하지 않았다.)

이제 ui file을 만들었으니 기존 코드에 연결하고 새로운 로그인 클래스를 만들었다.
class LoginScreen(QDialog):
def __init__(self):
super(LoginScreen, self).__init__()
uic.loadUi("login_form.ui", self)
self.loginBtn.clicked.connect(self.loginfunction)
class를 선언하고 다음과 같이 ui 파일과 py파일을 연결했다.
그리고 loginBtn 이란 버튼 요소를 클릭했을 때 실행될 함수를 연결했다. (ui file에서 로그인 버튼이란 객체의 이름을 loginBtn 으로 설정했음)
def loginfunction(self):
user = self.idField.text()
password = self.pwField.text()
그 다음 로그인 버튼이 눌렸을 때 실행되는 loginfunction이라는 함수를 만들었고 아이디를 입력하는 idField, 패스워드를 입력하는 pwField를 각각 user, password 라는 변수에 저장했다.
if len(user)==0 or len(password)==0:
self.error.setText("아이디 패스워드 모두 입력하세요.")
else:
conn = sqlite3.connect("user_data.db")
cur = conn.cursor()
query = 'SELECT password FROM login_data WHERE id =\''+user+"\'"
cur.execute(query)
result_pass = cur.fetchone()[0]
if result_pass == password:
self.accept()
else:
self.error.setText("아이디와 패스워드를 확인하세요.")
이후 아이디와 패스워드에 아무내용이 없을 시 뜨게 되는 에러텍스트를 만들었고, 그 이외에는 sqlite를 이용해서 여기저기 찾아 쿼리문을 만들었다. 로그인 시 입력했던 내용이 db파일에 있는 db와 일치한다면 main 창을 accept 해주는 창을 띄우게 했고 아니라면 에러텍스트가 발생하게 만들었다.
if __name__ == '__main__':
app = QApplication(sys.argv)
login = LoginScreen()
if login.exec_() == QDialog.Accepted:
window = MyWindow()
window.show()
sys.exit(app.exec_())
마지막으로 가장 하단에 파일을 실행시키는 if문을 다음과 같이 수정해줬다.
결과는 예상외로 오류없이 잘 실행됐고 db file에 추가한 db를 입력했을 때 메인 창이 잘 실행됐다.
이제 다음으로 이 python 코드를 이용해 실행파일을 만들어 봐야겠다.
전에 pyinstaller 이용해서 실행파일을 만들었을 때 오류들이 많았어서 바로 잘 될지는 모르겠지만..
'개발일지' 카테고리의 다른 글
Pyinstaller - 실행파일 만들 때 오류 줄이는 방법 (Pyinstaller GUI) (4) | 2022.05.23 |
---|