ATM + 购物车项目
一个项目是如何从无到有的
1、需求分析(需要关注)
额度 15000 或 自定义 ---> 注册功能
实现购物商城,买东西加入 购物车,调用 信用卡接口 结账 ----> 购物功能、支付功能
可以提现,手续费5% ---> 提现功能
支持多账户登录 ---> 登录功能
支持账户间转账 ---> 转账功能
记录消费流水 ---> 记录流水功能
提供还款接口 ---> 还款功能
ATM记录操作日志 ---> 记录日志功能
提供管理接口,包括添加账户、修改用户额度,冻结账户等。。。 ---> 管理员功能(添加账户、修改用户额度,冻结账户)
用户认证用装饰器 ---> 登录认证装饰器‘
# 用户界面允许用户能选择的功能
1.注册功能
2.登录功能
3.查看余额
4.提现功能
5.还款功能
6.转账功能
7.查看流水
8.购物功能
9.查看购物车功能
10.管理员功能
- 添加账户、修改用户额度,冻结账户
2、程序的架构设计(需要关注)
- 三层架构(*******)
- 视图层: 专门用于与用户交互;
- 展示功能给用户看、接收用户输入的数据、将功能返回的结果展示给用户看的;
- 接口层: 专门做业务逻辑的处理;
- 接收到用户输入的数据,进行逻辑判断,然后返回判断后的结果给视图层;
- 数据层: 专门做数据的处理
- 增加数据
- 删除数据
- 更新数据
- 查看数据
3、分任务开发
- 项目经理:(项目的负责人)
- UI(1-2人): 界面设计(app端的界面/web界面)。
- 前端(1-2人): 拿到UI的设计图纸,开发页面。
- 后端(2-3人): 开发业务逻辑
- 运维(1人): 拿到开发好的代码,部署再 “服务器” 中,上线运行
4、测试软件
5、上线运营
6、设计思路
我们主要设计方向在于需求分析以及程序架构设计上,再开始项目的时候,我们应该将分类创建每个功能的文件夹在这个项目中我们创建了如下的文件夹用来存放相关py
文件
conf文件夹 | Config(配置)存放相关配置文件 | 用户、商品文件路径,日志文件配置 |
core文件夹 | source(源码)用来存放源代码以区别开其它文件 | 存放需求,登录、注册、转账… |
db文件夹 | database(数据库)组织、存储和管理数据的仓库 | 数据层,查看数据修改数据 |
inteface文件夹 | interface(接口)接口文件夹,存放接口文件 | 银行业务接口,用户业务接口,购物业务接口 |
lib文件夹 | library(库,图书馆)存放共用方法或者库 | 装饰器,获取用户名,获取日志对象 |
log文件夹 | log(日志)用来记录日志用户操作的文档 | 记录用户操作信息 |
conf文件夹
settings.py
在settings.py
文件中我们需要配置文件基础文件路径(BASE_PATH
)数据文件(db_path
)文件路径 和日志文件配置。这里主要使用os
库,将db文件夹
添加到系统路径
import os
# 定量 基础路径
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
# database文件路径
db_path = os.path.join(BASE_PATH, "db")
core文件夹
src.py
在这个文件中我们主要放置显示层代码,主要是基础交互和一些简单地逻辑判断。
from interface import bank_interface # 导入接口层
from interface import user_interface
from interface import shop_interface
def sign_up():
while True:
up_name = input("请注册您的账号:").strip()
up_pwd = input("请注册您的密码:").strip()
reup_pwd = input("请重新输入您的密码:").strip()
if up_pwd == reup_pwd:
flag, msg = user_interface.sign_up_interface(up_name, up_pwd) # 调用接口层
if flag is True:
print(msg)
break
else:
print(msg)
else:
print("两次输入的密码不一致请重新输入!")
pass
比如这个注册功能,与用户交互 输入(input
)与输出(print
)。src
文件还有一个功能就是要调用接口层(interface
)
db文件夹
db_handel + 数据文件
1、db_handel
文件为数据层文件,里面主要存放,调用数据的功能,比如说查看资料(select
),保存文件(save
),或者查看商品(view_product
),这三个方法都是对文件的操作,with open…
2、在这个文件夹中主要是存放数据文件比如说用户信息文件(user.json
),商品信息文件(商品.json
)
import json
import os
from conf import settings
path = settings.db_path # 路径配置
# 查看资料 文件操作
def select(name):
if os.path.exists(path + "\%s.json" % name):
with open(path + "\%s.json" % name, "r", encoding="utf-8")as f:
user_dic = json.load(f)
return user_dic
interface文件夹
interface文件夹存放的是,各种接口功能,接口功能调用数据层功能,接口层也是需要分类的,在ATM与购物车中我们有三种内容,每种内容都需要一个接口
1、user_interface
在这个接口中,主要是针对用户功能的,比如说登录sign_in和注册sign_up,拿着个注册功能来说,主要的逻辑判断,以及数据层的导入。
from db import db_handle
def sign_up_interface(name, pwd):
user_dic = db_handle.select(name) # 数据层
if user_dic:
return False, "该用户已存在"
else:
user_info = {"name": name, "password": pwd, "balance": 150000, "flow": [], "shopping": {}, "locked": False}
db_handle.save(user_info) # 数据层
logger_info.info("注册成功")
return True, "恭喜你注册成功"
2、bank_interface
3、shop_interface
同理,这两个接口的用法也是相同的
lib文件夹
这个文件夹中主要存放公用方法,库啊,装饰器啊,日志配置啊…
common.py
文件中
我们在这个文件夹中存放了装饰器,还有日志
import logging.config # 到处logging模块的配置变量
from conf import settings
def get_logger(user_type):
# 1) 架子啊logging配置信息
logging.config.dictConfig(settings.LOGGING_DIC) # 导入上面定义的logging配置
# 2) 获取 银行相关的 logger对象
logger = logging.getLogger(user_type) # 生成一个log实例
# 3) logger.info(日志信息) info:日志的级别
# [INFO][2020-07-28 12:07:07,097][settings.py:97]tank 购买了 矮根派
# logger.info('tank 购买了 矮根派') # 记录该文件的运行状态
# 4) 返回日志对象
return logger
log文件夹
access.log
文件 主要是记录日志内容
[2020-07-31 20:31:30,887][MainThread:13124][task_id:user][user_interface.py:14][INFO][注册成功]
[2020-07-31 20:34:02,027][MainThread:17748][task_id:user][user_interface.py:14][INFO][注册成功]
[2020-07-31 20:34:31,708][MainThread:12776][task_id:user][user_interface.py:22][INFO][恭喜您[1]登录成功!]
start.py
相当于我们的执行程序.exe
通过这个执行程序调用core中的代码!