代码实战篇
要求
.按照软件开发⽬录规范创建出完整⽬录
.核⼼逻辑⽂件中编写调用⽤户注册登录功能,
.注册功能要有校验⽤户是否存在和数据保存的功能
.common.py⽂件中编写⼀个可以统计函数运⾏时间的装饰器给每个核⼼逻辑功能添加上统计执⾏功能
.⽤户数据保存使⽤json格式并且单⽤户单⽂件
.添加查看全体⽤户数据功能
.⽤户选择需要查看的⽤户数据后直接打印出该⽤户数据的全部信息
(⾃由发挥 可以直接打印反序列化后的字典或者格式化美化输出)
.添加执⾏操作系统命令功能,⽤户选择该功能后 获取⽤户想要执⾏的操作命令 交由操作系统执⾏,将返回结果打印给⽤户查看
.
- 先写整体框架结构代码,core文件夹里面建一个src.py文件
from lib.common import register, login, check1 # 导入对应的功能函数的对应函数名
func_dict = { # 定义一个功能函数名为值的字典
'1': register,
'2': login,
'3': check1,
}
def run(): # 函数主体运行的框架代码
while True:
print("""
1.注册功能
2.登录功能
3.查看用户数据
0.退出程序
""")
func_n = input('请输入要执行的功能编号')
if func_n not in func_dict:
print('没有您要执行的功能编号')
if func_n == '0':
break
func_dict.get(func_n)() # 根据用户输入编号,在字典里面找到对应的功能函数名再加括号运行函数
.
.
- 开始写各功能函数的代码
import os
import json
import time
base_dir = os.path.dirname(os.path.dirname(__file__)) # dirname获取当前文件所在的目录路径,嵌套使用就是获取上一级的路径
db_dir = os.path.join(base_dir,'db') # 项目根目录路径与'db'拼接
if not os.path.isdir(db_dir): # 判断db文件目录是否存在,就是判断db文件夹存不存在
os.mkdir(db_dir) # 不存在就创建一个
# 装饰器
def outer(func):
def inner(*args,**kwargs):
start_time = time.time() # 获取时间戳
res = func(*args,**kwargs)
end_time = time.time() # 再获取时间戳
use_time = end_time - start_time
print(f'程序执行时间为{use_time}') # 打印统计时间
return res
return inner
@outer
def register(): # 先写注册功能
while True:
username = input('请输入用户名q>>:').strip()
if username == 'q':
break
user_file_path = os.path.join(db_dir, f'{username}.json') # 将db文件路径与用户名.json文件名拼接,形成字符串,后续打开不需要r''了
if os.path.isfile(user_file_path): # 判断拼接的路径是否已经存在
print('该用户名已经存在,请重新注册')
continue
password = input('请输入密码').strip() # 获取用户密码
age = input('请输入年龄').strip() # 获取用户年龄
user_dict = {
'real_name': username, # 构建用户字典
'real_pwd': password,
'real_age':age,
'real_account': 10000,
'shop_car': []
}
with open(user_file_path, 'w', encoding='utf8')as f: # 用w模式打开该文件,如果这个文件不存在,就会自动创建该文件了
json.dump(user_dict, f) # 先将字典转为json格式,再写入文件
print('用户注册成功')
break
@outer
def login(): # 再写登录功能
while True:
username = input('请输入用户名q>>:').strip()
if username == 'q':
break
user_file_path = os.path.join(db_dir, f'{username}.json') # 还是先拼接出用户名文件路径
if not os.path.isfile(user_file_path): # 判断这个路径存不存在
print('该用户名不存在')
continue
password = input('请输入密码').strip()
with open(user_file_path, 'r', encoding='utf8')as f: # r模式打开用户文件
user_dict2 = json.load(f) # 先读出来,再反序列化将json格式数据转为正常格式数据
if user_dict2.get('real_pwd') == password: # 判断密码是否正确
print('登录成功')
break
else:
print('密码错误')
@outer
def check1(): # 再写查看功能
while True:
username = input('请输入用户名(q):').strip()
user_file_path = os.path.join(db_dir, f'{username}.json') # 还是先拼接出用户名文件路径
if username == 'q':
break
with open(user_file_path, 'r', encoding='utf8') as f:
user_dict = json.load(f)
print(f"""
------------user_info----------
姓名:{user_dict.get('real_name')}
年龄:{user_dict.get('real_age')}
账户余额:{user_dict.get('real_account')}
-------------------------------
""")
.
.
.
.
.
- 最后再写一个start文件
from core.src import run # 导入src模块
import os, sys # 导入os与sys模块
base_dir = os.path.dirname(os.path.dirname(__file__)) # 获取项目根路径
sys.path.append(base_dir) # 将项目根路径添加到系统环境变量中去
if __name__ == '__main__': # 设置执行文件运行脚本
run() # 调用运行src里的,项目框架函数体代码
标签:总结,--,db,20221023,json,user,time,path,os
From: https://www.cnblogs.com/tengyifan888/p/16819241.html