Python实现用户登录系统与三次错误锁定功能
1. 项目概述今天要分享一个非常实用的Python小项目——模拟用户登录系统并实现三次错误锁定功能。这个功能在实际应用中非常常见比如银行APP、企业OA系统等都会采用类似的机制来防止暴力破解。作为Python初学者实现这样一个功能不仅能巩固基础语法还能学习到文件操作、流程控制等核心知识点。这个项目的核心逻辑是用户有三次尝试登录的机会如果连续三次输入错误密码系统就会锁定该账号禁止再次尝试登录。锁定状态会持续到管理员手动解除在本例中通过删除黑名单文件实现。下面我会从零开始详细讲解每个实现步骤。2. 核心功能设计2.1 系统流程图整个登录系统的流程可以简化为以下几个关键步骤用户输入用户名系统检查用户名是否在黑名单中如果在黑名单中直接拒绝登录如果不在允许输入密码验证用户名和密码组合验证失败则记录尝试次数达到三次失败后将该用户加入黑名单2.2 数据结构设计我们需要两个核心数据存储正确的用户名和密码示例中硬编码为test/test黑名单用户列表存储在black_user文件中注意实际项目中绝对不要将密码明文存储这里仅为演示用途。生产环境应该使用密码哈希加盐存储。3. 代码实现详解3.1 基础框架搭建首先创建一个Python文件比如命名为login_system.py。我们先导入必要的模块并定义常量# -*- coding: utf-8 -*- MAX_ATTEMPTS 3 # 最大尝试次数 BLACKLIST_FILE black_user.txt # 黑名单文件名 CORRECT_USERNAME test # 正确用户名 CORRECT_PASSWORD test # 正确密码3.2 黑名单检查功能接下来实现检查用户是否在黑名单中的功能def is_user_locked(username): try: with open(BLACKLIST_FILE, r) as f: locked_users f.read().splitlines() return username in locked_users except FileNotFoundError: # 如果黑名单文件不存在视为没有锁定用户 return False这个函数会尝试打开黑名单文件读取所有被锁定的用户名每行一个检查输入的用户名是否在其中如果文件不存在自动创建空列表3.3 主登录逻辑下面是核心的登录验证逻辑def login(): username input(请输入用户名: ) if is_user_locked(username): print(账号已被锁定请联系管理员) return attempts 0 while attempts MAX_ATTEMPTS: password input(请输入密码: ) if username CORRECT_USERNAME and password CORRECT_PASSWORD: print(登录成功) return else: attempts 1 remaining MAX_ATTEMPTS - attempts if remaining 0: print(f用户名或密码错误还剩{remaining}次尝试机会) # 如果执行到这里说明三次都错了 with open(BLACKLIST_FILE, a) as f: f.write(f{username}\n) print(错误次数过多账号已被锁定)3.4 完整代码整合将以上部分组合起来并添加一些友好的交互提示def main(): print( 用户登录系统 ) while True: login() choice input(\n是否继续尝试(y/n): ) if choice.lower() ! y: break if __name__ __main__: main()4. 功能测试与验证4.1 正常登录场景运行程序输入正确的用户名(test)和密码(test)应该看到登录成功的提示4.2 错误密码场景运行程序输入正确的用户名(test)连续三次输入错误密码第三次错误后应该看到锁定提示再次尝试用同一用户名登录时应该直接提示账号锁定4.3 黑名单文件检查程序运行后会在同一目录下生成black_user.txt文件里面记录了被锁定的用户名。可以手动删除这个文件来解除锁定。5. 进阶改进建议5.1 密码隐藏输入当前版本输入密码时会明文显示不安全。可以使用getpass模块改进from getpass import getpass password getpass(请输入密码: )5.2 锁定时间限制当前锁定是永久的可以增加时间限制import time import json # 存储锁定时间和用户名 lock_data { username: test, lock_time: time.time() # 当前时间戳 } # 保存到文件 with open(lock_data.json, w) as f: json.dump(lock_data, f) # 检查是否超过锁定时间 def is_lock_expired(): try: with open(lock_data.json, r) as f: data json.load(f) return time.time() - data[lock_time] 3600 # 1小时 except FileNotFoundError: return True5.3 多用户支持目前只支持一个硬编码用户可以扩展为从文件或数据库读取用户数据# users.json { users: [ { username: test, password: test # 实际应该存储密码哈希 }, { username: admin, password: admin123 } ] }6. 常见问题排查6.1 文件权限问题如果在Linux/Mac上运行可能会遇到文件权限错误。解决方法chmod 644 black_user.txt6.2 中文编码问题如果用户名包含中文确保文件以UTF-8编码保存with open(BLACKLIST_FILE, a, encodingutf-8) as f: f.write(f{username}\n)6.3 跨平台兼容性Windows和Linux的换行符不同可以统一处理locked_users f.read().splitlines() # 自动处理不同换行符7. 项目扩展思路这个基础版本还可以进一步扩展添加密码强度检查实现密码重置功能增加验证码机制记录登录日志添加管理员解锁功能比如实现一个简单的解锁功能def unlock_user(): username input(输入要解锁的用户名: ) if not is_user_locked(username): print(该用户未被锁定) return with open(BLACKLIST_FILE, r) as f: users f.read().splitlines() users.remove(username) with open(BLACKLIST_FILE, w) as f: f.write(\n.join(users)) print(f用户 {username} 已解锁)8. 安全注意事项虽然这只是一个演示项目但有几个重要的安全原则需要注意永远不要明文存储密码 - 应该使用bcrypt等安全哈希算法黑名单文件应该放在非web可访问的目录考虑对登录尝试进行IP限制生产环境应该使用成熟的认证框架如Django的auth系统一个简单的密码哈希示例import bcrypt # 存储密码 password mypassword.encode(utf-8) hashed bcrypt.hashpw(password, bcrypt.gensalt()) # 验证密码 input_password mypassword.encode(utf-8) if bcrypt.checkpw(input_password, hashed): print(密码正确)9. 性能优化建议当用户量很大时当前的文本文件方案可能性能不佳。可以考虑使用SQLite数据库存储用户和黑名单实现缓存机制减少文件IO对频繁访问的数据保持内存缓存简单的SQLite实现示例import sqlite3 def init_db(): conn sqlite3.connect(auth.db) c conn.cursor() c.execute(CREATE TABLE IF NOT EXISTS users (username TEXT PRIMARY KEY, password TEXT)) c.execute(CREATE TABLE IF NOT EXISTS blacklist (username TEXT PRIMARY KEY, lock_time TIMESTAMP)) conn.commit() conn.close()10. 项目部署说明最后如果你想把这个小项目变成一个真正的服务可以考虑使用Flask/Django做成Web服务添加HTTPS支持配置Nginx反向代理实现会话管理一个最简单的Flask示例from flask import Flask, request, jsonify app Flask(__name__) app.route(/login, methods[POST]) def login(): data request.json username data.get(username) password data.get(password) # 这里添加验证逻辑 return jsonify({status: success}) if __name__ __main__: app.run()这个Python登录系统虽然简单但涵盖了很多实际开发中的核心概念。通过不断迭代和完善你可以把它发展成一个功能完备的认证系统。在实际开发中建议直接使用成熟的认证库但理解底层原理对成为更好的开发者至关重要。

相关新闻

Python编程从入门到精通:3个月系统学习路线与实践指南

Python编程从入门到精通:3个月系统学习路线与实践指南

1. Python学习路线规划作为一名从零开始学习Python的开发者,我花了三个月时间系统掌握了这门语言的核心要点。Python作为当前最流行的编程语言之一,其简洁的语法和丰富的生态使其成为入门编程的首选。不同于其他语言的陡峭学习曲线,Python更像…

2026/7/24 3:21:52 阅读更多 →
GHelper终极指南:免费轻量级华硕笔记本优化神器,5分钟告别臃肿控制中心

GHelper终极指南:免费轻量级华硕笔记本优化神器,5分钟告别臃肿控制中心

GHelper终极指南:免费轻量级华硕笔记本优化神器,5分钟告别臃肿控制中心 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, Pr…

2026/7/21 13:25:40 阅读更多 →
Android开发环境搭建与数据结构应用实战

Android开发环境搭建与数据结构应用实战

1. 实验背景与环境搭建这个数据结构综合应用实验需要我们在Android开发环境中完成,这意味着我们需要先搭建好Java开发环境和Android Studio工具链。作为一名长期从事移动开发的工程师,我深知环境配置中的各种坑,这里分享下我的实战经验。首先…

2026/7/21 16:10:01 阅读更多 →

最新新闻

3步掌握文件格式伪装:突破传输限制的终极方案

3步掌握文件格式伪装:突破传输限制的终极方案

3步掌握文件格式伪装:突破传输限制的终极方案 【免费下载链接】apate 简洁、快速地对文件进行格式伪装 项目地址: https://gitcode.com/gh_mirrors/apa/apate 你是否曾因文件格式限制而无法将重要文档上传到企业系统?是否担心敏感数据在云存储中缺…

2026/7/25 11:47:45 阅读更多 →
告别“听不清”与“吵翻天”:AU-60,一款能重塑音频体验的“全能语音管家”

告别“听不清”与“吵翻天”:AU-60,一款能重塑音频体验的“全能语音管家”

AU60规格书 在智能设备遍地开花的今天,语音交互已成为我们与机器沟通的本能。然而,一个尴尬的现实是:环境噪音、尖锐的回音、复杂的设备接口,常常让这个本能变得“耳背”且“口吃”。 想象这些场景: 智能门铃前&…

2026/7/25 11:47:45 阅读更多 →
3分钟搞定Gofile高速下载:告别龟速下载的终极免费方案

3分钟搞定Gofile高速下载:告别龟速下载的终极免费方案

3分钟搞定Gofile高速下载:告别龟速下载的终极免费方案 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 还在为Gofile平台的下载速度发愁吗?你是否曾经…

2026/7/25 11:47:45 阅读更多 →
创业团队利用Taotoken统一管理多个AI模型API以控制开发成本

创业团队利用Taotoken统一管理多个AI模型API以控制开发成本

创业团队利用Taotoken统一管理多个AI模型API以控制开发成本 对于小型创业团队而言,在开发AI驱动的产品或功能时,通常会尝试接入多个不同的大模型,以寻找最适合当前任务或最具性价比的方案。然而,直接对接多家厂商的API&#xff0…

2026/7/25 11:47:45 阅读更多 →
初中生学习机推荐对比:2026年四个品牌的真实差异在哪

初中生学习机推荐对比:2026年四个品牌的真实差异在哪

孩子一上初中,家长最先崩溃的往往不是成绩,而是“这题我也看不懂”。科目从三门直接跳到九门,物理化学说加就加。翻翻孩子的数学作业,函数图像自己都认不全;物理受力分析图,看着像天书。以前还能“我看看”…

2026/7/25 11:47:45 阅读更多 →
AI视频生成技术解析:从多模态建模到移动端优化

AI视频生成技术解析:从多模态建模到移动端优化

1. 项目背景:当AI视频生成遇上春节流量洪峰 每年春节都是互联网平台的流量竞技场,而2024年的战役在AI视频赛道打响了第一枪。字节跳动旗下抖音推出的Seedance 2.0多模态生成系统,在春节期间实现了单日超2000万次的AI视频生成量。这个数字背后…

2026/7/25 11:46:45 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻