python阶段总结---ATM+购物车项目

已经学习了一段时间的Python了,现在我们通过一个小项目来把基础阶段所学的内容练习一下吧.
摘要由CSDN通过智能技术生成

目录

​​前言:

项目需求:

架构设计

用户层: 

核心逻辑层:

数据层:

软件开发目录规范

参见:python--- 软件开发目录规范及其发展史_Yietong309的博客-CSDN博客

项目功能搭建

项目启动脚本

配置文件settings.py

日志功能

因为用户后期的操作都需要在登录的情况下才能完成, 所以密码加密, 登录认证装饰器,都属于公共功能, 可以放在lib文件夹下的common.py文件中. 日志功能也属于公共功能,也可以放在这里. 

common.py 下功能介绍

密码加密

详情参见:python--hashlib加密模块_Yietong309的博客-CSDN博客

登录认证装饰器

日志功能

common.py汇总

数据库db_handler.py

第一层(展示给用户看的, 只进行简单的小校验)

 全局变量

普通用户视图

src.py

管理员视图

admin_src.py

interface

user_intrtface.py

bank_interface.py

shop_interface.py

admin_interface.py


​​前言:

已经学习了一段时间的Python 了, 现在我们通过一个小项目来把基础阶段所学的内容练习一下吧.

项目需求:

  1. 额度10000或者自定义
  2. 支持多账户登录
  3. 可以查看账户余额
  4. 可以提现
  5. 提供还款接口
  6. 支持账户间转账
  7. 记录每月日常消费
  8. 实现购物商城
  9. 提供管理接口,包括添加账户,用户额度,冻结账户等
  10. ATM记录操作日志
  11. 用户认证功能

从需求中提炼此项目的核心功能

  • 用户注册
  • 用户登录
  • 查看余额
  • 账户提现
  • 充值功能
  • 转账功能
  • 查看账单
  • 购物车功能
  • 管理员功能

核心技术点为:

1. python核心语法

2. python诸多模块

3. 装饰器

架构设计

三层架构: 浏览器, 服务端, 数据库

以购买商品为例: 浏览器页面展示商品>>> 基于网络将购买商品的操作发送给服务端做核心校验>>>操作响应数据库完成数据修改.

用户层: 

数据展示, 数据获取,>>>> cmd窗口可以充当用户层, 奖励啊可以替换成浏览器或者app

核心逻辑层:

业务逻辑>>> 某个py文件充当逻辑层, 后期可以替换成软件开发目录规范或者现成的框架

数据层:

数据的增删改查>>>json文件充当数据库, 将来可以替换成数据库程序,如mysql,redis等

软件开发目录规范

bin

        start.py                                项目启动文件

conf

        settings.py                            配置文件

lib

        common.py                           公共功能

core 

        src.py                                    充当第一层     

interface                                        充当第二层

        user_interface                        用户业务逻辑判断接口

        bank_interface                        银行业务逻辑判断接口

        shop_interface                        购物业务逻辑判断接口

        admin_interface                      管理员业务逻辑判断接口

log                                                   日志文件, 可以通过代码创建    

db                                                    数据库文件

        db_handler                              数据库

readme                                            项目说明

requirements                                   项目使用到的软件等信息     

参见:python--- 软件开发目录规范及其发展史_Yietong309的博客-CSDN博客

项目功能搭建

利用空函数进行项目搭建

def register():

        pass

def login():

        pass

     ....

项目启动脚本

start.py

获取根路径,添加到系统操作路径中,以达到在不同电脑或者系统下能运行的目的.

import os
import sys

from core import src

# 兼容系统环境
sys.path.append(os.path.dirname(os.path.dirname(__file__)))


# 启动脚本
if __name__ == '__main__':
    src.run()

配置文件settings.py

配置文件属于配置类信息, 属于万年不变的信息, 所以放在settings里, 且变量名大写,以示身份. 

import os

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
DB_DIR = os.path.join(BASE_DIR, 'db')

if not os.path.exists(DB_DIR):
    os.mkdir(DB_DIR)




# 这里插播一个后期会用到的小配置信息: 利率, 后期银行业务, 如果需要调整手续费, 可以在这里直接更改,
相对于规定死的手续费,此方法更加灵活一些


# 定义一个利息
TAX_FEE = 0.05

日志功能

日志功能主要是为了记录用户的日常操作. 燕过留痕, 相当于监控系统, 由于该功能写完之后不需要再变动,且需要从头到尾记录, 所以属于配置类文件, 可以放在settings里.

日志功能详情参见: python-- 日志模块, logging_Yietong309的博客-CSDN博客

# 定义日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                  '[%(levelname)s][%(message)s]'  # 其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
# 定义日志输出格式 结束

"""
下面的两个变量对应的值 需要你手动修改
"""
LOG_DIR = os.path.join(BASE_DIR, 'log')
# 如果不存在定义的日志目录就创建一个
if not os.path.isdir(LOG_DIR):
    os.mkdir(LOG_DIR)
logfile_name = 'ATM.log'
# log文件的全路径
logfile_path = os.path.join(LOG_DIR, logfile_name)
# log配置字典
LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'standard': {
            'format': standard_format
        },
        'simple': {
            'format': simple_format
        },
    },
    'filters': {},  # 过滤日志
    'handlers': {
        # 打印到终端的日志
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': 'simple'
        },
        # 打印到文件的日志,收集info及以上的日志
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件
            'formatter': 'standard',
            'filename': logfile_path,  # 日志文件
            'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M
            'backupCount': 5,
            'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
        },
    },
    'loggers': {
        # logging.getLogger(__name__)拿到的logger配置
        '': {
            'handlers': ['default', 'console'],  # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
            'level': 'DEBUG',
            'propagate': True,  # 向上(更高level的logger)传递
        },  # 当键不存在的情况下 (key设为空字符串)默认都会使用该k:v配置
    },
}

因为用户后期的操作都需要在登录的情况下才能完成, 所以密码加密, 登录认证装饰器,都属于公共功能, 可以放在lib文件夹下的common.py文件中. 日志功能也属于公共功能,也可以放在这里. 

common.py 下功能介绍

密码加密

类似于现实生活里的微信号和密码. 微信号可以让所有人都知道, 但是密码只能自己知道, 一旦密码泄露,个人信息也会全部泄露.  而互联网世界里没有绝对的安全, 所以我们要对密码进行加密处理, 这样别人就算是窃取了我们的数据信息, 也无法直接解密, 从而减小信息泄露的危险. 

密码加密的方式有很多1、明文保存;2、对称加密算法来保存;3、MD5、SHA1等单向HASH算法;4、PBKDF2算法;5、bcrypt、scrypt等算法。 这里我们就使用md5进行加密

详情参见:python--hashlib加密模块_Yietong309的博客-CSDN博客

def get_md5(pwd):
  
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值