Python과 Tkinter를 사용한 간단한 로그인 시스템

10996 단어 websitepythonlogin

안녕하세요 여러분, 이 기사는 Python과 Tkinter로 간단한 로그인 시스템을 구축하는 방법에 대해 설명합니다.



Maxwell NelsonUnsplash님의 사진

소스코드만 확인하고 싶다면,

Github

이 텍스트 전체에서 사용할 용어의 의미



Pisit HengUnsplash님의 사진

GUI — 그래픽 사용자 인터페이스

Interactive Text, Button 등으로 나타날 화면입니다.

의 시작하자



Kyle GlennUnsplash님의 사진

이 로그인 시스템은 크로스 플랫폼 GUI를 구축하기 위한 Python 내장 라이브러리인 Tkinter로 만들어졌습니다.

또한 암호 암호화를 위해 Bcrypt와 같은 다른 라이브러리와 SQlite3 데이터베이스와 상호 작용하기 위한 Python 내장 라이브러리인 Sqlite3를 사용합니다.

안전 벨트 프로그래머 고정



Fabian GrohsUnsplash님의 사진

먼저 필수 라이브러리를 설치합니다.



Tkinter — Python과 함께 사전 설치되지만 때때로 제공되지 않습니다. 그것은 나에게 일어났습니다.

sudo apt-get install python-tk

이제 Bcrypt 및 SQlite3을 향해 나아갑니다.

pip install bcrypt

SQlite3가 사전 설치됨

main.py 구조화



main.py는 앱의 기본 진입점입니다.

OOP 방법론을 사용하여 로그인 시스템을 프로그래밍할 것입니다.

여기,

*1행, *Tkinter 라이브러리에서 모든 함수 가져오기

3행, 프로그램에 MainWindow라는 클래스를 정의합니다.

4행, 클래스에 대한 지역 변수를 정의하는 데 도움이 되는 클래스에 대한 init() 특수 메서드입니다.

init() 메서드에서 앱을 정의하고 Tkinter의 Tk() 클래스 인스턴스로 만듭니다.

그리고 다른 것들은,

제목 — 메인 창에 제목을 지정하는 데 사용됩니다.

기하학 — GUI의 높이와 너비를 정의하는 데 사용되는 문자열입니다.

레이블 — 화면 또는 GUI에 텍스트를 인쇄하는 데 사용됩니다.

버튼 — 버튼을 생성하는 데 사용됩니다.

위의 코드 아래에 다음 두 줄을 추가하여 실행하십시오...

app = MainWindow()
app.run()

그런 다음 터미널로 이동하여 해당 디렉토리로 cd하십시오.

다음 명령을 사용하여 python 파일을 실행합니다.

cd YourDirectory
python3 main.py

윈도우에서,

python main.py

이 코드는 몇 가지 사항을 변경해야 하므로 오류를 생성합니다.

코드에 로그인 및 등록 기능 추가

코드는 다음과 같아야 합니다.

tkinter 가져오기에서 *
from login 가져오기 로그인, 회원가입

class MainWindow:
 def __init__(self):
 self.app = Tk()
 self.app.title(“Login with Python”)
 self.app.geometry(“300x250”)
 self.label = Label(self.app, text=”Welcome To App”)
 self.label.place(x=95, y=40)
 self.login = Button(self.app, text=”Login”,
 pady=5, padx=30, command=login)
 self.login.place(x=100, y=100)
 self.register = Button(self.app, text=”Register”,
 pady=5, padx=20, command=register)
 self.register.place(x=100, y=150)

def run(self):
 self.app.mainloop()

def login():
 loginTk = Login()
 loginTk.run()

def register():
 registerTk = Register()
 registerTk.run()

app = MainWindow()
app.run()

이제 Login 및 Register Class를 저장하기 위해 "login.py"라는 파일을 만들어야 합니다.

로그인.py

from tkinter import *
from tkinter import messagebox
import bcrypt
from database import Database

db = Database()
db.createTable()

class Login:

“””
 Class for Login
 [@param](http://twitter.com/param) username
 [@param](http://twitter.com/param) password
 “””

def __init__(self):
 “””
 Class Init Method for GUI
 :params — loginWindow, label, username
 “””

# Variables for Tkinter
 self.loginWindow = Tk()
 self.loginWindow.title(“Login with Python”)
 self.loginWindow.geometry(“300x250”)
 self.label = Label(self.loginWindow, text=”Login”)
 self.label.place(x=95, y=40)

# Just Creepy Tkinter Stuff
 self.usernameS = StringVar()
 self.passwordS = StringVar()

self.usernameE = Entry(
 self.loginWindow, relief=FLAT, textvariable=self.usernameS)
 self.usernameE.place(x=70, y=80)
 self.passwordE = Entry(
 self.loginWindow, show=”*”, relief=FLAT, textvariable=self.passwordS)
 self.passwordE.place(x=70, y=120)

# Actual Variales
 self.username = self.usernameS.get()
 self.password = self.passwordS.get()

self.submit = Button(self.loginWindow, text=”Submit”,
 pady=5, padx=20, command=self.validate)
 self.submit.place(x=100, y=150)

def validate(self):
 data = (self.username,)
 inputData = (self.username, self.password,)
 try:
 if (db.validateData(data, inputData)):
 messagebox.showinfo(“Successful”, “Login Was Successful”)
 else:
 messagebox.showerror(“Error”, “Wrong Credentials”)
 except IndexError:
 messagebox.showerror(“Error”, “Wrong Credentials”)

def run(self):
 self.loginWindow.mainloop()

class Register:

“””
 Class for Register
 [@param](http://twitter.com/param) username
 [@param](http://twitter.com/param) password
 “””

def __init__(self):

self.registerWindow = Tk()
 self.registerWindow.title(“Register with Python”)
 self.registerWindow.geometry(“300x250”)
 self.label = Label(self.registerWindow, text=”Register”)
 self.label.place(x=95, y=40)

# Just Creepy Tkinter Stuff
 self.usernameS = StringVar()
 self.passwordS = StringVar()

self.usernameE = Entry(self.registerWindow,
 relief=FLAT, textvariable=self.usernameS)
 self.usernameE.place(x=70, y=80)
 self.passwordE = Entry(self.registerWindow, show=”*”,
 relief=FLAT, textvariable=self.passwordS)
 self.passwordE.place(x=70, y=120)
 self.submit = Button(self.registerWindow,
 text=”Submit”, pady=5, padx=20, command=self.add)
 self.submit.place(x=100, y=150)

# Actual Variales
 self.username = self.usernameS.get()
 self.password = self.passwordS.get()

self.salt = bcrypt.gensalt()
 self.hashed = bcrypt.hashpw(self.password.encode(), self.salt)

def run(self):
 self.registerWindow.mainloop()

def add(self):
 data = (self.username,)

result = db.searchData(data)

print(result)

if result != 0:
 data = (self.username, self.hashed)
 db.insertData(data)
 messagebox.showinfo(“Successful”, “Username Was Added”)
 else:
 messagebox.showwarning(“Warning”, “Username already Exists”)

코드 설명



우선, 우리는 라이브러리를 가져옵니다 —

Bcrypt — for Encrypting Password

Tkinter — GUI library

database — It is our python file which has some SQlite Code in it

그런 다음 database.py 내부에 존재하는 데이터베이스 클래스의 인스턴스를 생성합니다.

그런 다음 해당 클래스의 메서드를 호출합니다. 그러면 테이블이 생성됩니다.

db = Database()
db.createTable()

모든 로그인 관련 항목을 처리할 로그인 클래스를 정의했습니다.

그런 다음 Dunder 방법 또는 Python의 특수 방법을 정의합니다.

def __init__():

여기에는 Tkinter 관련 항목이 있습니다.

로그인 클래스의 두 번째 방법:

def validate():

이 방법은 로그인을 확인하고 암호를 일치시킵니다.

튜플의 데이터베이스에서 사용자를 찾기 위해 사용자 이름을 정렬합니다.

그런 다음 튜플로 입력 데이터를 정렬합니다.

def validate(self):
 data = (self.username,)
 inputData = (self.username, self.password,)

그런 다음 Database Class에서 ValidateData로 메서드를 호출하는지 확인하거나 Data를 확인합니다.

try:
 if (db.validateData(data, inputData)):
 messagebox.showinfo(“Successful”, “Login Was Successful”)
 else:
 messagebox.showerror(“Error”, “Wrong Credentials”)

주의 깊게 살펴보면 우리는 시도를 시작했습니다 — 차단을 제외하고.

반환 값이 있는지 확인한 다음 사용자에게 "로그인에 성공했습니다"를 표시합니다.

그렇지 않으면 오류가 표시됩니다.

블록 제외 —

except IndexError:
 messagebox.showerror(“Error”, “Wrong Credentials”)

데이터베이스에서 찾지 못한 경우 SQLite는 **IndexError **를 발생시켜 쉽게 해결할 수 있습니다...

그런 다음 Register Class를 정의했습니다. 동일한 작업을 수행하지만 데이터베이스에 추가하고

self.salt = bcrypt.gensalt()
self.hashed = bcrypt.hashpw(self.password.encode(), self.salt)

암호를 암호화하는 데 사용됩니다.

데이터베이스.py

# Importing Important Libraries

import sqlite3
import bcrypt

class Database:
 ‘’’
 Database Class for sqlite3
 :params conn — sqlite3Connection
 :params curr — cursor
 ‘’’

def __init__(self):
 try:
 self.conn = sqlite3.connect(“test.db”)
 print(“Successfully Opened Database”)
 self.curr = self.conn.cursor()
 except:
 print(“Failed”)

def createTable(self):
 ‘’’
 Method for Creating Table in Database
 ‘’’

create_table = ‘’’
 CREATE TABLE IF NOT EXISTS cred(
 id Integer PRIMARY KEY AUTOINCREMENT,
 username TEXT NOT NULL,
 password TEXT NOT NULL
 );
 ‘’’

self.curr.execute(create_table)
 self.conn.commit()

def insertData(self, data):
 ‘’’
 Method for Inserting Data in Table in Database
 ‘’’

insert_data = “””
 INSERT INTO cred(username, password)
 VALUES(?, ?);
 “””
 self.curr.execute(insert_data, data)
 self.conn.commit()

def searchData(self, data):
 ‘’’
 Method for Searching Data in Table in Database
 ‘’’

search_data = ‘’’
 SELECT * FROM cred WHERE username = (?);
 ‘’’

self.curr.execute(search_data, data)

rows = self.curr.fetchall()
 if rows == []:
 return 1
 return 0

def validateData(self, data, inputData):
 ‘’’
 Method for Validating Data Table in Database
 ‘’’

print(data)
 print(inputData)

validate_data = “””
 SELECT * FROM cred WHERE username = (?);
 “””

self.curr.execute(validate_data, data)
 row = self.curr.fetchall()

if row[0][1] == inputData[0]:
 return row[0][2] == bcrypt.hashpw(inputData[1].encode(), row[0][2])

이들은 Python으로 실행되는 SQL 명령 모음입니다.

시간 내 줘서 고마워.

집에 머물고 안전하게 지내십시오



사티암 쿨카르니

좋은 웹페이지 즐겨찾기