项目开发从0到1

项目开发流程

1、项目开发总体思路:

  (1)需求分析(提取功能)

  (2)架构设计

  (3)分任务开发

  (4)项目测试

  (5)项目上线

2、打开pycharm解释器,创建一个项目文件,点击File-->选择New Project..-->Location里编辑项目名称和存储位置-->点击Create,项目创建成功

3、创建readme.md文件,这里存放该项目的基本信息,

一个项目是如何从无到有的
1、需求分析:
(1)拿到项目,会先在客户那里一起讨论需求。
商量项目的功能是否能实现,周期与价格----《需求文档》
(2)最后在公司内部开一次内部会议。技术总监,产品经理---《开发文档》
交给不同岗位的程序员进行开发。
python:后端,爬虫
--不同的岗位--
UI界面设计:
设计软件的布局,会根据软件的外观切成一张张图片。
前端开发:
拿到UI交给的图片,搭建网页页面
设计一些页面中,那些位置需要接收数据,需要进行数据交互
后端开发:
直接写核心的业务逻辑,调度数据库进行数据的增删改查。
测试工程师:
会给代码进行全面的测试,界面测试(CF卡箱子)、功能、性能、压力
运维工程师:
上线部署

2、程序的架构设计
程序设计的好处
(1)思路清晰。
(2)不会出现写一半代码时推翻重写。
(3)方便自己或者以后的同事更好的维护。

三层架构设计的好处
1)把每个功能都分层三部分,思路清晰
2)如果用户更换不同的界面或不同的数据储存机制。都不会影响接口层的核心逻辑代码,扩展性强,便于维护
3)可以在接口层,准确的记录日志和流水。

下图以用户登录为例演示三层架构设计

4、我们以模拟实现一个《ATM + 购物商城》程序为例说明,需求如下:

  1. 额度 15000或自定义
  2. 实现购物商城,买东西加入 购物车,调用信用卡接口结账
  3. 可以提现,手续费5%
  4. 每月22号出账单,每月10号为还款日,过期未还,按欠款总额 万分之5 每日计息
  5. 支持多账户登录
  6. 支持账户间转账
  7. 记录每月日常消费流水
  8. 提供还款接口
  9. ATM记录操作日志 
  10. 提供管理接口,包括添加账户、用户额度,冻结账户等。。。
  11. 用户认证用装饰器
4.1)第一步、需求分析:提取项目需求
1、额度 15000或自定义 --> 注册功能
2、实现购物商城,买东西加入 购物车,调用信用卡接口结账 -->购物车功能,支付功能
3、可以提现,手续费5% --> 提现功能
暂时不用实现:每月22号出账单,每月10号为还款日,过期未还,按欠款总额 万分之5 每日计息
4、支持多账户登录 --> 登录功能
5、支持账户间转账 --> 转账功能
6、记录每月日常消费流水 --> 记录流水功能
7、提供还款接口 --> 还款功能
8、ATM记录操作日志 --> 记录日志功能
9、提供管理接口,包括添加账户、用户额度,冻结账户等。。。 --> 管理员功能
10、用户认证用装饰器 -->登录认证的装饰器

4.2)第二步、架构设计

  第一层:用户视图层

    用于与用户进行交互:

      接受用户输入的内容

      返回打印输出内容给用户

  第二层:逻辑接口层

    业务的核心逻辑,相当于用户视图层与数据处理层间的桥梁

      接收用户视图层传递过来的参数进行逻辑处理

      返回结果给视图层

  第三层:数据处理层

    做数据处理

      增、删、改、查

 架构设计的具体实现如下:

ATM根目录

  readme.md --> 项目的文件说明书

  conf --> 配置文件

    settings.py

  lib --> 存放公共方法文件

    common.py

  core --> 存放视图层代码文件

    src.py

  inter --> 存放逻辑接口层文件,存放核心业务逻辑代码

    user_interfance.py:   用户相关的接口

    bank_interface.py:    银行相关的接口

    shop_interface.py:  购物车相关的接口

  db --> 存放数据处理层代码文件

    db_handler.py:       数据处理层代码

    user_data.py:         用户数据

  log --> 存放日志文件

  bin --> 存放启动文件(可以不写,直接将启动文件存放到根目录下)

    start.py  程序的启动文件

  

代码实现

1)第一步:start.py中添加解释器的环境变量,导入src

2)第二步:程序执行到run(),到core-->src.py

3)第三步:代码继续运行跑到func_dic处,创建空函数,创建函数字典

输入功能编号1,进入字典匹配1对应的函数,是注册功能,调用register()函数

程序运行register()函数:

  第一步用户输入内容,

  第二步调用接口层的注册接口,

  第三步展示结果给用户

 

  register()函数之第二步:调用接口层的注册接口(路径inter-->user_interface-->register_interface-->db_bandler.select())

 register()函数之进入数据处理层调用select(username)函数,判断username.json文件是否存在,并返回结果给接口层,(1)有则返回user_dic,(2)没有则返回None。

(1) 假设username.json文件已存在,会把user_dic的结果返回给用户视图层的src-->register_interface

 

 用户名已存在:用户视图层的src-->register_interface(分别把False-->flag,       用户已存在----->msg),如下所示:打印“用户已存在”

 (2)用户名不存在则返回None,如下图所示,①if判断不执行,②加密密码,③创建一个新字典user_dic,④进入数据处理层调用save()功能保存该数据

 

  ④进入数据处理层调用save()功能保存数据:db_handler.py-->save(user_dic)-->user_dic.get("username")得到该字典名称给到username-->拼接文件路径-->打开conf文件夹下的settings.py文件,运行settings.USER_DATA_PATH

打开conf文件夹下的settings.py文件,运行settings.USER_DATA_PATH:如下图所示①USER_DATA_PATH拼接文件路径,②③找文件的根目录BASE_PATH,④找到db文件,⑤找到user_data文件。此处返回一个文件路径给到USER_DATA_PATH

 

 上面返回一个文件路径给到USER_DATA_PATH:①:把settings返回值再次回到db_handler.py文件,②得到user_path拼接后的文件路径,③路径+文件名=该文件(用户名.json)④文件保存到指定位置。⑤获取(用户名.json)文件路径并打开。⑥把save(user_dic)参数user_dic传给(用户名.json)

 说明:ensure_ascii=False作用让文件(用户名.json)中的中文数据,显示更美观,而不是以二进制形式展示,如下图所示: 

 

ensure_ascii=True以二进制形式展示如下所示:

 

 数据保存成功:db_handler里的save()保存功能执行完毕后回到user_interfance.py中:①db_handler.save()功能实现。②程序继续向下运行。③程序遇到return 将结果(结果是:True,用户名注册成功)返回给register_interface,register_interface拿到数据返回给src(最开始调用register_interface的地方),

 register_interface拿到数据返回给src(上回书说到用户不存在的情况调用register_interface的地方),①user_interface拿到(True,用户名注册成功),分别把True-->flag,       用户名注册成功----->msg。②程序继续运行。③进入判断打印“用户名注册成功”

 注册功能展示完毕

 

posted @ 2020-04-20 13:14  思江  阅读(551)  评论(0编辑  收藏  举报