Day25.拆分版注册功能

1.拆分版注册功能_第一层:用户视图层(src.py)和第二层:逻辑接口层(user_interface.py)

第一层:用户视图层(src.py)_注册功能:

# 注册功能_分层版
def register():
    while True:
        # 1) 让用户输入用户名和密码进行校验
        username = input('请输入用户名:').strip()
        password = input('请输入密码:').strip()
        re_password = input('请确认输入密码:').strip()
        # 小逻辑:比如两次密码是否一致
        if password == re_password:
            # 逻辑接口层代码存在:interface/user_interface.py
            # 2) 调用接口层的注册接口,将用户名和密码交给接口层来进行处理
            # res -----> (# return (False, '用户名已存在!'))
            # res = user_interface.register_interface()
            # flag, msg -----> (flag ---> False, msg ---> '用户名已存在')
            # (True, 用户注册成功), (False, 注册失败)
            from ATM.interface import user_interface
            flag, msg = user_interface.register_interface(username, password)
            # 数据处理层代码存在:db/db_handler.py
            
            # 3) 根据flag判断用户注册是否成功,flag(True or False)用于控制break
            if flag:
                print(msg)
                break
            else:
                print(msg)

第二层:逻辑接口层(user_interface.py)_注册功能:

from ATM.db import db_handler

# 注册接口
def register_interface(username, password, balance=15000):
    # 2) 查看用户是否存在
    # 2.1) 调用数据处理层中的select函数,会返回 用户字典 或 None
    user_dic = db_handler.select(username)
    
    # {user:user, pwd:pwd...} or None
    # 若用户存在,则return,告诉用户重新输入
    if user_dic:
        return False, '用户名已存在!'

    # 3) 若用户不存在,则保存用户数据
    # 3.1) 组织用户数据的字典信息
    user_dic = {
        'username': username,
        'password': password,
        'balance': balance,   # 余额
        'flow': [],         # 用于记录用户流水的列表
        'shop_car': {},     # 用于记录用户购物车
        'locked': False     # 用于记录用户是否被冻结,Flase:未冻结,True:已冻结
    }
    
    # 3.2) 保存数据
    db_handler.save(user_dic)

    return True, '{}注册成功'.format(username)

2.拆分版注册功能_第二层:逻辑接口层(user_interface.py)和第三层:数据处理层(db_handler.py)

 第三层:数据处理层(db_handler.py)_注册功能:

import os
from ATM.conf import settings
import json

# 查看数据
def select(username):
    # 1) 接收接口层传过来的username用户名,拼接用户json文件路径
    user_path =  os.path.join(
            settings.USER_DATA_PATH, '{}.json'.format(username)
            )
    # 2) 校验用户json文件是否存在
    if os.path.exists(user_path):
        # 3) 打开数据,并返回分接口层
        with open(user_path, 'r', encoding='utf-8') as f:
            user_dic = json.load(f)
            return user_dic
    # 3) 不return, 默认return None

# 保存数据
def save(user_dic):
    # 1) 拼接用户的数据字典
    username = user_dic.get('username')
    user_path =  os.path.join(
        settings.USER_DATA_PATH, '{}.json'.format(username)
    )
    print('user_path:{}'.format(user_path))
    
    # 2) 保存用户数据
    with open(user_path, 'w', encoding='utf-8') as f:
        # ensure_ascii=False 让文件中的中文数据,显示更美观
        json.dump(user_dic, f, ensure_ascii=False)
        print('用户`{}`注册成功'.format(username))

 3.拆分版注册功能_程序运行结果:

 

posted on 2024-06-11 14:09  与太阳肩并肩  阅读(10)  评论(0)    收藏  举报

导航