1主要内容
1 用户注册
2 用户登陆
3 还款
4 查余额
5 转账
6 提现(手续费%5)
7 查流水
8 充值
9 购物
10查看购物车
11 登陆认证用装饰器
2一个项目是如何从无到有的
2.1需求分析
需求分析自然是开发项目做的第一件事情。产品部门跟客户谈论需求,分析出能否开发出客户的需求,如果不能,则让客户更改需求或者改进需求,最后拿到一份需求报表,开发部门通过需求报表分析出可以实现的需求。
通过主要的内容,分析出相关的因素有:
1、用户登陆,用户注册(涉及到用户)
2、还款,转账,查余额,提现,查流水,充值(与银行相关)
3、购物,查看购物车(购物商城相关)
2.2程序的架构设计
程序架构设计的好处
1)思路清晰,代码清晰
2)不会出现因为逻辑混淆,推翻重写问题
3)方便自己或他人接手项目,可以更好的维护
2.3 三层架构
三层架构其实是实现“高内聚,低耦合”的思想,使项目层级分明,逻辑性更加紧密,扩展性更强。
(1)三层架构第一层:
用户视图层:负责和用户进行交互
(2)逻辑接口层:负责处理表示层的业务逻辑,
调用数据处理层,得到结果,将结果进行逻辑判断,返回表示层
(3)数据处理层对用户数据的增删查改,将结果返回给逻辑处理层
有了三层架构的概念,可以把项目分为三层,每层之间相互独立,减少代码冗余,提高开发效率。
2.4三层架构设计图
图2-1 三层架构设计图
2.5任务分配
把功能分发给团队人员,各个人员通过三层架构图,设置接口参数,返回相
应的数据内容。
2.6 测试
把项目交给测试部门,测试部门测试项目的功能是否通常,有没有逻辑处理上面的错误等等。如果有则返回给开发部,进行修改。
2.7项目上线
测试通过的话就交给运维人员,对软件进行部署,然后上线给用户使用。
3技术内容
1、采用PyChram(集成环境开发工具)来实现项目需求。
2、采用三层架构
三层架构其实是实现“高内聚,低耦合”的思想,使项目层级分明,逻辑性更加紧密,扩展性更强。
3、熟练使用os模块,sys模块,json模块,logging日志模块等内置模块
4、使用功能的封装,定义自定义模块,调用模块间的功能接口
模块的功能让代码更加清晰,冗余代码不再频繁出现,代码上逻辑冲突也随之减少很多
5、装饰器
装饰器其实实现的是一种思想,“开放封闭原则”。“开放”指的是不修改源代码的同时为其添加新功能。“封闭”指的是对源代码不进行修改。装饰器在python中有两种装饰器,第一种是函数装饰器,第二种是类装饰器。我们的项目用到的是第一种装饰器。通过闭包函数的形式来实现装饰器这种思想。
6、软件开发目录规范
为了要提高程序的可读性和可维护性,我们要为软件设计良好的目录结构,这与论文的规范格式同等重要。软件的目录规范并无硬性的标准,只要清晰,可读,明了即可。
但是身为小白,我们可以参考别人的开发规范,让我们的项目文件看的过去,不然只有自己才能看懂。
bin文件夹 一般放执行文件,启动文件
core 给用户使用的核心代码,毕竟用户是上帝,没有核心代码给用户使用,那么这个软件就没有了存在价值
conf 配置文件(给使用者提供一些可配置的文件)
log 日志 记录软件运行和使用者的一些行为记录
lib 存放自定义模块之类的文件夹
interface 用户接口文件,处理三层架构中用户视图层的请求
db 调用三层架构中数据处理层的文件夹
Readme 应该是存在于每个项目文件中的,目的是能简要描述该软件项目的信息,让使用者快速了解这个项目。内容有:
1、软件定位,软件的基本功能;
2、运行代码的方法: 安装环境、启动命令等;
3、简要的使用说明;
4、代码目录结构说明,更详细点可以说明软件的基本原理;
5、常见问题说明。
4开发
4.1在Pychram主流开发软件中创建目录规范文件夹
4.2在core文件夹中创建src.py文件,写核心代码(给用户使用的,源代码没有展示)
在bin目录文件夹中创建start.py启动文件,开始写代码。
__name__是内置方法,如果启动文件是被当作模块导入的话,就不会运行
4.3在开始写核心代码之前想象一下功能展示格式
这是在Pychram命令终端输出的格式,给用户使用的格式是交给UI设计部门设计的。
使用者输入业务序号,就可以使用对应的功能。
4.4不过使用者在使用功能之前应该先注册 ——>登陆
我们项目的发展依赖使用者的购买欲,所以我们默认给注册用户提供假设15000元的额度(自定义额度,随便设置)
4.5 用户登陆成功,可以调取用户信息,存入到内存中,方便以后用户使用与信息相关的功能,可以第一时间拿去,减少性能的损耗
具体实现步骤:
用户登陆成功过后,可以购物,查余额等等操作,但是比如我们登陆淘宝,登陆成功过后,就没有了注册功能。现在项目中,我们登陆了但是还能注册,所以,我们要定义一个规则,来确定用户是否登陆。
用户状态的变量设定为一个字典
用户登陆之前,设定一个默认值,代表用户没有登陆
user_state = {’username’:None, state:False}
用户登陆之后(比如用户名 zxy 登陆),登陆成功过后,给user_state中的值重新赋值,代表用户登陆的标志
user_state = {’username’:zxy, state:True}
用户在没登陆之前,想查看余额,流水,购物车等操作,是要先进行登陆的,但是没有装饰器,可以采用7.51的思想,但是装饰器也是一种常用的思想。那么应该加上登陆认证装饰器,为检查用户是否登陆,如果没有登陆,就返回提醒用户登陆,如果登陆就执行原功能
装饰器一般放在lib目录下的common.py文件中
装饰器的思想就是为源代码添加新功能,但是源代码的功能不能更改。
结合我们没有登陆就能查看余额、查看流水、查看购物车的逻辑错误,装饰器就能很好的解决。
装饰器解决原理图
4.6用户体验功能(还款,转账,查余额,提现,查流水,充值)选择其中几个功能
4.7用户信息的存取设计(没有用到数据库)
在现有的存取介质中,项目采用的是文件存取。
文件的存取。存不是目的,目的是取。采用的方案是导入json模块,其中有一个方法是把字符串中的数据类型(如字典)取出来,并且保留字典中原有的数据。正是采用这个方法,让我们的用户数据存取是那么的方便。并且一个用户对应一个json文件,文件名和用户名一一对应。上面用户名为zxy,那么在电脑中一定有一个zxy.json的文件,那就是对应的用户信息文件。
4.8 如何存入json文件
python提供了一个函数叫open函数,打开本地文件的函数,其中有r,w,a,+等基本功能其中w的功能非常强大,指定文件路径,如果有文件,则打开文件,删除文件的所有内容如果没有,则直接创建新的文件。所以该项目直接用了open函数中的w模式。直接写入用户数据。
4.9 如何找到对应的用户名文件———os模块
os模块是和操作系统打交道的,其中就有一个方法找到对应的文件,但是得指定出文件的路径,在目录开发规范中,一般是把用户文件放在db中的(在文件操作中,一般放在数据库),通过写入时存放的路径信息,查看是否有指定的文件,如果有返回bool值 True,没有则返回False,interface文件夹中查询用户是否存在的功能会收到返回结果,然后做出一个判断,然后返回给用户视图层。
如图:(没有画出模块)
通过这个逻辑,我们可以在这些返回的结果基础之上完成后面的一些功能,如查流水,转账,查余额,查看购物车等等。
5开发购物功能
在用户注册成功的那一刻开始,就已经给用户配置了一些信息。
比如购物车是空的,账户余额是0,账户额度是15000,账户流水是空等等。
该场景在当今的各个电商平台都可以清楚的体验到。比如淘宝,注册成功过
后,用户登陆查看自己的购物车是空的,花呗额度是0,支付宝余额是0等等。
所以我们在开发购物功能中,就把购物商城中的数据做好就ok了。
用户登陆,选择购物功能,查看商品列表
拿购物车为例:当用户购物时,就会把看中的商品加入购物车。
对应的商品名称,价格,商品数量都会展示出来
5.1 如何把对应的商品取出来,加入到购物车
我们这个项目所牵扯的实质无非是在和数据打交道。对数据的增删查改,就是在学python的时候对基础数据类型进行增删查改操作。
我们把展示给用户看的商品做成一个列表,然后遍历出商品列表,遍历前调用enumerate()函数,把商品列表中的商品对应的下标和商品名称以元组的形式打印出来,并且是一一打印出来(商品下标:商品),显示到终端(给用户使用是在前端展示)。具体格式如下
用户输入对应的序号,底层调用是列表的切片操作,加入到用户信息字典中。
用户信息字典中对应的商品字典格式为
"shop":{"商品名称":{"价格":价格,"数量":1}}
如 ’shop’:{car:{"price":100,"count":1}}
5.2用户体验购物
5.3用户查看购物车
6项目总结
从需求分析到做出产品的过程。
1、需求分析
2、三层架构的设计
3、代码分层(分到三层架构中)
4、一层一层的分配给开发人员,开发人员再分配功能
5、各层之间接口调试
6、功能调试
7、提交项目给测试部门
参考文献
1、《零基础入门学习Python》小甲鱼著 清华大学出版社
2、《python全栈开发实战》(第三版) Alex Li,Egon Lin,Eva Jing著