Python文件操作实战案例之用户登录
作者:Philosophy7 发布时间:2023-07-12 18:03:37
一、前言
在上一小节,我们介绍了文件的基本操作以及数据交换的格式,为了巩固我们上一节文件操作的知识。
在这里我们做一个最基本的案例:用户登录
二、案例:用户登录
许多的应用都涉及数据的存储和使用,作为存储数据的基本形式,文件与应用密不可分。
1.案例分析
用户登录模块可分为管理员和用户登录,若使用该软件或浏览器中,系统就会判断用户是否为首次使用:若是首次使用,则进行初始化,否则进入用户类型选择。若选择管理员登录,则直接登录。如果是用户,那么就给用户提示是否需要注册登录。
根据以上分析,用户管理模块包含以下几个文件
标识位文件flag 用于检测是否初次登录,初识数据为0,首次启动程序为将其中数据修改为1
管理员账户文件u_root。用于保存管理员的账户信息
普通用户账户文件。用于保存普通用户注册的账户。
2.程序设计
main()程序的入口
c_flag : 标识位文件更改
init 信息初始化
print_login_menu 打印登录菜单
user_select 用户选择
root_login 管理员登录
user_register 用户注册
user_login 普通用户登录
2.1 main()
该函数是程序的入口,这里需要做的就是判断是否是首次使用该系统,保证读取到的为同一个标志位对象,这里将标志位对象的数值存储到文件flag中,每次启动程序时都先调用main函数 该函数应先打开flag文件,从其中读取数据进行判断,根据表示文件的数据来进行执行不同的分支。
def main():
flag = open("flag")
word = flag.read()
if word == "0":
print("首次登录")
flag.close()
c_flag() #标识为1
init() # 初始化
print_login_menu() #打印登录菜单
user_select() # 选择用户
elif word == "1":
#不是首次登录
print("欢迎回来")
print_login_menu()
user_select()
else:
print("初始化异常...")
2.2 c_flag()
该函数用于修改flag文件中的内容
def c_flag():
file = open("flag","w")
file.write("1")
file.close()
2.3 init()
初次启动系统时,需要创建管理员账户和用户文件
#3.初始化 创建管理员文件和普通用户目录
def init():
file = open("u_root","w") # 创建并打开管理员账户文件
root = {"username" : "root","pwd" : "123456"}
file.write(str(root))
file.close()
os.mkdir("users")
2.4 print_login_menu()
该函数用于打印菜单
2.5 user_select()
系统根据用户输入,选择执行不同的流程。
用户输入1 调用root_login函数进行管理员登录等等
def user_select():
while True:
user_type_select = input("请输入选择用户类型:")
if user_type_select == "1":
root_login()
break
elif user_type_select == "2":
while True:
select = input("是否需要注册?(y/n)")
if select == "y" or select == "Y":
print("---用户注册---")
user_register() # 用户注册
break
elif select == "n" or select == "N":
print("用户登录")
break
else:
print("输入有误 重新选择")
user_login() #用户登录
break
elif user_type_select == "0":
return
else:
print("输入有误,请重新选择")
2.6 root_login()
实现管理员登录
def root_login():
while True:
print("管理员登录")
root_user = input("请输入账户:")
root_pwd = input("请输入密码")
file_root = open("u_root") #只读的方式打开
root = eval(file_root.read()) #读取账户信息
#信息校验
if root_user == root["username"] and root_pwd == root["pwd"]:
print("登录成功")
break
else:
print("校验失败")
2.7 user_register()
用户注册函数
def user_register():
user_id = input("请输入用户名:")
user_pwd = input("请输入密码")
user_name = input("请输入昵称")
user = {"u_id" : user_id,"u_pwd":user_pwd,"u_name":user_name}
user_path = "./users" + user_id
file_user = open(user_path,"w") #创建用户文件
file_user.write(str(user)) #写入
file_user.close() #保存关闭
2.8 user_login()
实现用户登录函数,校验文件中的数据和输入的数据
def user_login():
while True:
print("普通用户登录")
user_id = input("请输入账户名:")
user_pwd = input("请输入密码")
#获取users目录下的所有文件
user_list = os.listdir("./users")
#遍历列表 判断user_id是否在列表中
flag = 0
for user in user_list:
if user == user_id:
flag = 1
print("登录中....")
#打开文件
file_name = "./users" + user_id
file_user = open(file_name)
#获取文件内容
user_info = eval(file_user.read())
if user_pwd == user_info["u_pwd"]:
print("登录成功")
break
if flag == 1:
break
elif flag == 0:
print("没有该用户 请先注册")
break
到这里用户登录案例就完成了
最后在程序中添加如下代码:
if __name__ == "__main__":
main()
3.功能演示
在程序目录中创建flag文件,并在其中输入0,保存退出,执行程序
代码汇总
import os
#3.初始化 创建管理员文件和普通用户目录
def init():
file = open("u_root","w") # 创建并打开管理员账户文件
root = {"username" : "root","pwd" : "123456"}
file.write(str(root))
file.close()
os.mkdir("users")
#4.打印登录菜单
def print_login_menu():
print("-----用户选择-----")
print("-----1.管理员登录-----")
print("-----2.普通用户登录-----")
print("-----0.退出-----")
print("-"*30)
#6.管理员登录
def root_login():
while True:
print("管理员登录")
root_user = input("请输入账户:")
root_pwd = input("请输入密码")
file_root = open("u_root") #只读的方式打开
root = eval(file_root.read()) #读取账户信息
#信息校验
if root_user == root["username"] and root_pwd == root["pwd"]:
print("登录成功")
break
else:
print("校验失败")
#7.普通用户注册 在我们的分析当中 没有提前创建好文件用于保存用户信息 所以需要注册
def user_register():
user_id = input("请输入账户id:")
user_pwd = input("请输入密码")
user_name = input("请输入用户名")
user = {"u_id" : user_id,"u_pwd":user_pwd,"u_name":user_name}
user_path = "./users/" + user_id
file_user = open(user_path,"w") #创建用户文件
file_user.write(str(user)) #写入
file_user.close() #保存关闭
#8.用户注册完毕之后 登录用户
def user_login():
while True:
print("普通用户登录")
user_id = input("请输入账户id:")
user_pwd = input("请输入密码")
#获取users目录下的所有文件
user_list = os.listdir("./users")
#遍历列表 判断user_id是否在列表中
flag = 0
for user in user_list:
if user == user_id:
flag = 1
print("登录中....")
#打开文件
file_name = "./users/" + user_id
file_user = open(file_name)
#获取文件内容
user_info = eval(file_user.read())
if user_pwd == user_info["u_pwd"]:
print("登录成功")
break
if flag == 1:
break
elif flag == 0:
print("没有该用户 请先注册")
break
def user_select():
while True:
user_type_select = input("请输入选择用户类型:")
if user_type_select == "1":
root_login()
break
elif user_type_select == "2":
while True:
select = input("是否需要注册?(y/n)")
if select == "y" or select == "Y":
print("---用户注册---")
user_register() #用户注册
break
elif select == "n" or select == "N":
print("用户登录")
break
else:
print("输入有误 重新选择")
user_login() #用户登录
break
elif user_type_select == "0":
return
else:
print("输入有误,请重新选择")
#2.用于修改flag文件中内容 初次启动系统被调用
def c_flag():
file = open("flag","w")
file.write("1")
file.close()
# 1.#判断是否为首次使用函数
def main():
flag = open("flag")
word = flag.read()
if word == "0":
print("首次登录")
flag.close()
c_flag() #标识为1
init() # 初始化
print_login_menu() #打印登录菜单
user_select() # 选择用户
elif word == "1":
#不是首次登录
print("欢迎回来")
print_login_menu()
user_select()
else:
print("初始化异常...")
if __name__ == "__main__":
main()
来源:https://blog.csdn.net/ChengXuTeng/article/details/124540163


猜你喜欢
- python实现收支的自动计算,能够查询每笔账款的消费详情,具体内容如下1、函数需要两个文件:一个类似钱包功能,存放钱;另一个用于记录每笔花
- 简介Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建
- 1、Python 条件语句Python 条件语句是通过一条或多条语句的执行结果来决定执行的代码块。Python 编程中 if 语句用于控制程
- 本文实例为大家分享了python实现图书借阅系统的具体代码,供大家参考,具体内容如下部分代码:from flask import Flask
- 测试代码:输出简单的ul li1.asp代码如下:<% response.write "<ul>" r
- 环境系统:Centos7.2 服务:Nginx1:下载PHP7.0.2的安装包解压,编译,安装: $ cd /usr/s
- 这里我们采用的是使用Oracle数据库进行相关操作在连接数据库之间,应下载相应的工具包cx_Oracle,在你安装的Python文件夹中找到
- 前言emmm…9月1日开学季,手头只有红底证件照,但是学院要求要蓝底,这可咋办呢。懒得下ps了。自己撸起来吧。方法一:
- 目的:了解常用的ORM框架;使用SQLObject框架操作MySQL数据库。面试题:在Python语言中有哪些常用的ORM框架,它们有什么区
- 例如:var json = eval('('+ret+')'); 假设我们在服务器端使用php的encode
- 如果你是个学生,你应该会C,C++和Java。还会一些VB,或C#/.NET。多少你还可能开发过一些Web网页,你知道一些HTML,CSS和
- 本来而言,这个问题网上很多资料,但是网上资料都是复制来复制去,很多话大家其实都不是很明白的,或者拿着官方文档翻译过来的,让人看的非常迷糊。今
- 有时候需要在网页中某个div载入之后,动态引入一段javascript,IE下的解决方案: newjs. onreadystatechang
- 下面的例子演法了怎么样从协程里返回一个值:import asyncioasync def coroutine(): print(
- 一、模型方法 本工程采用的模型方法为朴素贝叶斯分类算法,它的核心算法思想基于概率论。我们
- asp之家注:那么为什么要使用分页呢?当记录不多的时候,如10个或20个,我们可以也没必要使用分页来显示数据,但是数据是在不断增加的,当到了
- 一、数组和切片的区别是什么?1.数组数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值
- 本文实例讲述了Python使用Pandas库常见操作。分享给大家供大家参考,具体如下:1、概述Pandas 是Python的核心数据分析支持
- 原来是在系统上出了问题.是2003的IIS出现了问题,因为是2003的系统,它对ASP的上传文件做出了200K的限制,解决问题方法如下 :
- 一.设置客户端网络实用工具点击“开始”-“程序”,在“Microsoft SQL Server”菜单中选择“客户端网络实用工具”。 在“别名