Python+Tkinter简单实现注册登录功能

我们就来详细讲解一下“Python+Tkinter 简单实现注册登录功能”的完整攻略。

概要

在这个攻略中,我们会通过 Python 和 Tkinter 库来实现一个简单的注册登录功能。其中,我们将会用到以下几个模块:

  • Tkinter:用于 GUI 编程
  • sqlite3:用于实现用户数据的存储和查询
  • hashlib:用于对密码进行哈希加密

在我们的应用中,用户注册后的信息将会被保存到本地的 SQLite 数据库中,并且密码将会被加密存储。用户在登录时需要输入正确的用户名和密码才能成功登录。

接下来,我们将逐步讲解如何实现这个功能。

创建用户数据表

我们的应用需要一个本地的数据库用于存储用户数据,所以我们需要先创建一个用户数据表。在这里,我们将会使用 SQLite3 进行数据的存储和查询。

首先我们需要导入 sqlite3 模块,然后创建一个 users 表来保存用户数据。users 表包含以下几个字段:id、username 和 password。其中,id 字段是一个自增的主键,用于唯一标识每一个用户。

import sqlite3

# 连接数据库
conn = sqlite3.connect('users.db')

# 创建用户数据表
conn.execute('''
    CREATE TABLE users (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        username TEXT NOT NULL,
        password TEXT NOT NULL
    )
''')

# 关闭数据库连接
conn.close()

注册用户

在注册功能中,用户需要输入用户名和密码,然后将用户数据保存到数据库中。在这里,我们需要注意两个问题:密码需要进行哈希加密,防止明文密码泄露;另外,需要对用户名做唯一性校验,防止重复注册。

首先,我们需要导入 hashlib 模块,然后编写一个函数来对密码进行哈希加密。在这个函数中,我们使用 SHA-256 算法对密码进行加密。

import hashlib

def hash_password(password):
    """
    对密码进行哈希加密
    """
    sha256 = hashlib.sha256()
    sha256.update(password.encode())
    return sha256.hexdigest()

然后,我们需要编写一个函数来实现用户注册功能。在这个函数中,我们需要先查询数据库中是否已经存在相同的用户名,如果不存在,则将用户数据保存到数据库中。

def register(username, password):
    """
    用户注册
    """
    # 查询数据库中是否存在相同的用户名
    conn = sqlite3.connect('users.db')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users WHERE username = ?', (username,))
    res = cursor.fetchone()

    if res:
        print('用户名已存在')
        return False
    else:
        # 对密码进行哈希加密
        hashed_password = hash_password(password)
        # 将用户数据保存到数据库中
        cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, hashed_password))
        conn.commit()
        conn.close()
        print('注册成功')
        return True

用户登录

当用户输入正确的用户名和密码时,应用会跳转到主界面。在这里,我们需要注意两个问题:密码需要进行哈希加密后再和数据库中的数据进行比对;如果用户名或者密码错误,应该给出提示。

首先,我们编写一个函数来验证用户登录。在该函数中,我们需要查询数据库中是否存在相同的用户名和密码。如果存在,则返回 True;否则,返回 False。

def validate_login(username, password):
    """
    验证用户登录
    """
    # 对密码进行哈希加密
    hashed_password = hash_password(password)

    # 查询数据库中是否存在相同的用户名和密码
    conn = sqlite3.connect('users.db')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, hashed_password))
    res = cursor.fetchone()

    if res:
        return True
    else:
        return False

然后,我们需要编写一个函数来实现用户登录功能。在这个函数中,我们需要获取用户输入的用户名和密码,然后调用 validate_login 函数来校验用户名和密码是否正确。

def login():
    """
    用户登录
    """
    # 获取用户输入的用户名和密码
    username = username_entry.get()
    password = password_entry.get()

    # 校验用户名和密码是否正确
    if validate_login(username, password):
        print('登录成功')
        # 跳转到主界面
        to_main()
    else:
        print('用户名或密码错误')

示例1:

注册

我们可以通过如下代码实现注册功能。

from tkinter import *
import sqlite3
import hashlib

def hash_password(password):
    """
    对密码进行哈希加密
    """
    sha256 = hashlib.sha256()
    sha256.update(password.encode())
    return sha256.hexdigest()

def register(username, password):
    """
    用户注册
    """
    # 查询数据库中是否存在相同的用户名
    conn = sqlite3.connect('users.db')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users WHERE username = ?', (username,))
    res = cursor.fetchone()

    if res:
        print('用户名已存在')
        return False
    else:
        # 对密码进行哈希加密
        hashed_password = hash_password(password)
        # 将用户数据保存到数据库中
        cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, hashed_password))
        conn.commit()
        conn.close()
        print('注册成功')
        return True

# 创建窗口
root = Tk()
root.geometry('300x200')
root.title('注册')

# 创建用户名标签和用户名框
username_label = Label(root, text='用户名:')
username_label.place(x=30, y=30)

username_entry = Entry(root, width=20)
username_entry.place(x=100, y=30)

# 创建密码标签和密码框
password_label = Label(root, text='密码:')
password_label.place(x=30, y=70)

password_entry = Entry(root, width=20, show='*')
password_entry.place(x=100, y=70)

# 创建注册按钮
register_button = Button(root, text='注册', command=lambda: register(username_entry.get(), password_entry.get()))
register_button.place(x=130, y=120)

root.mainloop()

运行代码后,我们会看到一个简单的注册界面。输入用户名和密码,然后点击注册按钮即可。

登录

我们可以通过如下代码实现登录功能。

from tkinter import *
import sqlite3
import hashlib

def hash_password(password):
    """
    对密码进行哈希加密
    """
    sha256 = hashlib.sha256()
    sha256.update(password.encode())
    return sha256.hexdigest()

def validate_login(username, password):
    """
    验证用户登录
    """
    # 对密码进行哈希加密
    hashed_password = hash_password(password)

    # 查询数据库中是否存在相同的用户名和密码
    conn = sqlite3.connect('users.db')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, hashed_password))
    res = cursor.fetchone()

    if res:
        return True
    else:
        return False

# 创建窗口
root = Tk()
root.geometry('300x200')
root.title('登录')

# 创建用户名标签和用户名框
username_label = Label(root, text='用户名:')
username_label.place(x=30, y=30)

username_entry = Entry(root, width=20)
username_entry.place(x=100, y=30)

# 创建密码标签和密码框
password_label = Label(root, text='密码:')
password_label.place(x=30, y=70)

password_entry = Entry(root, width=20, show='*')
password_entry.place(x=100, y=70)

# 创建登录按钮
login_button = Button(root, text='登录', command=lambda: login())
login_button.place(x=130, y=120)

def login():
    """
    用户登录
    """
    # 获取用户输入的用户名和密码
    username = username_entry.get()
    password = password_entry.get()

    # 校验用户名和密码是否正确
    if validate_login(username, password):
        print('登录成功')
        # 跳转到主界面
        to_main()
    else:
        print('用户名或密码错误')

def to_main():
    """
    跳转到主界面
    """
    root.destroy()

# 主循环
root.mainloop()

运行代码后,我们会看到一个简单的登录界面。输入正确的用户名和密码,然后点击登录按钮即可。

示例2

注册

我们可以使用带图标和背景的注册界面使得页面看起来更加美观。

from tkinter import *
import sqlite3
import hashlib

def hash_password(password):
    """
    对密码进行哈希加密
    """
    sha256 = hashlib.sha256()
    sha256.update(password.encode())
    return sha256.hexdigest()

def register(username, password):
    """
    用户注册
    """
    # 查询数据库中是否存在相同的用户名
    conn = sqlite3.connect('users.db')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users WHERE username = ?', (username,))
    res = cursor.fetchone()

    if res:
        print('用户名已存在')
        return False
    else:
        # 对密码进行哈希加密
        hashed_password = hash_password(password)
        # 将用户数据保存到数据库中
        cursor.execute('INSERT INTO users (username, password) VALUES (?, ?)', (username, hashed_password))
        conn.commit()
        conn.close()
        print('注册成功')
        return True

# 创建窗口
root = Tk()
root.geometry('300x200')
root.title('注册')

# 设置窗口图标
root.iconbitmap('icon.ico')

# 设置窗口背景
background_image = PhotoImage(file='bg.png')
background_label = Label(root, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

# 创建用户名标签和用户名框
username_label = Label(root, text='用户名:', font=('微软雅黑', 12), bg='white')
username_label.place(x=30, y=30)

username_entry = Entry(root, width=20, font=('微软雅黑', 12))
username_entry.place(x=100, y=30)

# 创建密码标签和密码框
password_label = Label(root, text='密码:', font=('微软雅黑', 12), bg='white')
password_label.place(x=30, y=70)

password_entry = Entry(root, width=20, show='*', font=('微软雅黑', 12))
password_entry.place(x=100, y=70)

# 创建注册按钮
register_button = Button(root, text='注册', command=lambda: register(username_entry.get(), password_entry.get()), bg='white', font=('微软雅黑', 12))
register_button.place(x=130, y=120)

root.mainloop()

运行代码后,我们会看到一个带图标和背景的注册界面。输入正确的用户名和密码,然后点击注册按钮即可。

登录

我们可以使用带图标和背景的登录界面使得页面看起来更加美观。

from tkinter import *
import sqlite3
import hashlib

def hash_password(password):
    """
    对密码进行哈希加密
    """
    sha256 = hashlib.sha256()
    sha256.update(password.encode())
    return sha256.hexdigest()

def validate_login(username, password):
    """
    验证用户登录
    """
    # 对密码进行哈希加密
    hashed_password = hash_password(password)

    # 查询数据库中是否存在相同的用户名和密码
    conn = sqlite3.connect('users.db')
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users WHERE username = ? AND password = ?', (username, hashed_password))
    res = cursor.fetchone()

    if res:
        return True
    else:
        return False

# 创建窗口
root = Tk()
root.geometry('300x200')
root.title('登录')

# 设置窗口图标
root.iconbitmap('icon.ico')

# 设置窗口背景
background_image = PhotoImage(file='bg.png')
background_label = Label(root, image=background_image)
background_label.place(x=0, y=0, relwidth=1, relheight=1)

# 创建用户名标签和用户名框
username_label = Label(root, text='用户名:', font=('微软雅黑', 12), bg='white')
username_label.place(x=30, y=30)

username_entry = Entry(root, width=20, font=('微软雅黑', 12))
username_entry.place(x=100, y=30)

# 创建密码标签和密码框
password_label = Label(root, text='密码:', font=('微软雅黑', 12), bg='white')
password_label.place(x=30, y=70)

password_entry = Entry(root, width=20, show='*', font=('微软雅黑', 12))
password_entry.place(x=100, y=70)

# 创建登录按钮
login_button = Button(root, text='登录', command=lambda: login(), bg='white', font=('微软雅黑', 12))
login_button.place(x=130, y=120)

def login():
    """
    用户登录
    """
    # 获取用户输入的用户名和密码
    username = username_entry.get()
    password = password_entry.get()

    # 校验用户名和密码是否正确
    if validate_login(username, password):
        print('登录成功')
        # 跳转到主界面
        to_main()
    else:
        print('用户名或密码错误')

def to_main():
    """
    跳转到主界面
    """
    root.destroy()

root.mainloop()

运行代码后,我们会看到一个带图标和背景的登录界面。输入正确的用户名和密码,然后点击登录按钮即可。

以上就是本次“Python+Tkinter 简单实现注册登录功能”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python+Tkinter简单实现注册登录功能 - Python技术站

(0)
上一篇 2023年6月13日
下一篇 2023年6月13日

相关文章

  • 网页爬虫之cookie自动获取及过期自动更新的实现方法

    网页爬虫之cookie自动获取及过期自动更新的实现方法 1. 什么是Cookie HTTP Cookie (也叫Web Cookie或浏览器Cookie)是指某些网站为了辨别用户身份、进行用户跟踪而存储在用户本地终端设备(通常是浏览器)上的数据,一般为名值对形式。 2. 为什么需要Cookie 在网页爬虫中,爬虫需要模拟登录操作才能获取需要的数据,而网站为了…

    python 2023年6月2日
    00
  • python编程线性回归代码示例

    让我们来详细讲解一下 “Python编程线性回归代码示例” 的完整攻略。 简介 在机器学习和数据挖掘领域,线性回归是一种常用的统计分析方法,用于分析和建立变量之间的线性关系。本文将提供 Python 编程的线性回归代码示例。 准备工作 在开始编写代码之前,需要安装以下 Python 库: numpy:用于在 Python 中进行科学计算 matplotlib…

    python 2023年5月19日
    00
  • 详解python读取和输出到txt

    下面是详解Python读取和输出到txt的完整攻略。 一、Python读取txt文件 Python可以很方便地读取txt文本文件中的数据,其中最常用的方法是使用open函数,然后再使用read方法将数据读取到内存中。 1.读取整个文件 代码示例: with open(‘test.txt’, ‘r’) as f: data = f.read() print(d…

    python 2023年6月5日
    00
  • 如何在Python中计算移动平均线

    计算移动平均线是选股和技术分析中常见的操作。在Python中,我们可以使用pandas库和它内置的rolling函数来计算移动平均线。 以下是计算移动平均线的完整攻略: 1. 读取数据 首先,我们需要读取股票价格数据。假设我们用的是CSV文件,可以使用pandas的read_csv函数来读取数据: import pandas as pd df = pd.re…

    python-answer 2023年3月25日
    00
  • Python 中使用 argparse 解析命令行参数

    使用 argparse 可以方便地解析命令行参数,以下是解析命令行参数的完整攻略: 安装 argparse argparse 是 Python 的标准库,因此它不需要额外的安装。 导入 argparse 模块 在使用 argparse 之前需要在代码中导入 argparse 模块: import argparse 创建 ArgumentParser 对象 使…

    python 2023年6月3日
    00
  • 使用matlab或python将txt文件转为excel表格

    下面我将为您详细讲解“使用matlab或python将txt文件转为excel表格”的完整实例教程。 一、使用Matlab将txt文件转为excel表格 准备数据 首先需要准备一份要转换的txt数据文件,数据格式应为表格数据,以制表符(tab)或逗号(,)分隔每一列。 在Matlab中导入数据 打开Matlab软件,点击菜单栏中的”Home”,并选择”Imp…

    python 2023年5月13日
    00
  • 如何在Python中进行双向方差分析

    双向方差分析是用于检验两种因素对于因变量的影响是否相互作用的一种统计方法。在Python中,我们可以使用 statsmodels 库对数据进行双向方差分析。下面是进行双向方差分析的详细攻略,包含两条示例说明。 步骤1:导入所需的库 在进行双向方差分析之前,需要导入所需的Python库,包括pandas、statsmodels.formula.api等。 im…

    python-answer 2023年3月25日
    00
  • python正则表达式常见的知识点汇总

    Python正则表达式常见的知识点汇总 正则表达式是一种强大的文本处理工具,可以用于匹配、查找、替换和割字符串。Python提供了re模块来处理正则表达式。本文将为您详细讲解Python正则表达式的常见知识点,包括正表达式语法、模块的常用方法和两个示例说明。 正则表达式语法 在正则表达中使用[]表示字符集,^表示取反,-表示范围,+匹配一个或多个字符,*表示…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部