ATM

承接上文软件开发目录规范

**软件开发目录规范(仅供参考,没有统一标准)**

假设我要开发一个叫ATM软件
ATM为顶级目录名字
# 执行程序放在bin(binary)下面
# conf 配置文件——》定制化的文件(比如产生的日志放在一个路径下面)
# core 核心代码 ,被导入的模块丢这里
# lib  共享一些功能 库(模块),自定义的库,存放功能的仓库
# logs 专门存放日志的文件夹
# readme 说明手册

bin目录下start.py文件(未改动)

执行程序放在bin下面
import sys
sys.path.append(r'D:\PycharmProject\s14\week03\day05分支\ATM')

from core.src import run

if __name__ == '__main__':
    run()

conf目录下settings.py(#内容——>原文件内容)

**知识点**
# BASE_DIR 返回路径中的目录部分
# print(__file__) 当前文件的绝对路径
# os.path.dirname(__file__)  返回脚本路径

**举例说明**

内容
import os  #导入标准库os(操作系统接口模块)
1. print(__file__)
2. print(os.path.dirname(__file__))
3. print( os.path.dirname(os.path.dirname(__file__)))

对应结果:
1. D:\PycharmProject\ATM\conf\settings.py
2. D:\PycharmProject\ATM\conf
3. D:\PycharmProject\ATM
# # 配置文件——》定制化的文件(比如产生的日志放在一个路径下面)
#
#
# import os
#
# BASE_DIR = os.path.dirname(os.path.dirname(__file__))
#
# LOG_PATH = r'%s\logs\access.log' % BASE_DIR
#
# # 配置路径写活了

import os

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

LOG_PATH = r'%s\logs\access.log' % BASE_DIR

LOGGING_DIC = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        '格式1': {
            'format': '%(asctime)s %(name)s %(filename)s:%(lineno)d %(levelname)s:%(message)s'
        },
        '格式2': {
            'format': '%(asctime)s :%(message)s'
        },
    },
    'filters': {},
    'handlers': {
        '屏幕': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',  # 打印到屏幕
            'formatter': '格式2'
        },
        '文件': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'formatter': '格式1',
            'filename': LOG_PATH,
            'encoding': 'utf-8',
        },
    },
    'loggers': {
         '交易日志': {
            'handlers': ['屏幕','文件'],
            'level': 'DEBUG',
            'propagate': False,
        },

        '': {
            'handlers': ['屏幕','文件'],
            'level': 'DEBUG',
            'propagate': False,
        },

    },
}

core目录下src.py(#内容——>原文件内容)

#  core 核心代码 ,被导入的模块丢这里
# from lib.common import log
#
#
# def logout():
#     print("退出".center(50,'*'))
#     exit()
#
# def login():
#     print('登录'.center(50,'*'))
#     log("egon刚刚登录了")
#
# def register():
#     print('注册'.center(50,'*'))
#
# def transfer():
#     print('转账'.center(50,'*'))
#     log("egon刚刚给刘sir转了10个亿")
#
# def withdraw():
#     print('提现'.center(50,'*'))
#
# def pay():
#     print('支付'.center(50,'*'))
#
#
# func_dic = {
#     '0': ['退出',logout],
#     '1': ['登录',login],
#     '2': ['注册',register],
#     '3': ['转账',transfer],
#     '4': ['提现',withdraw],
#     '5': ['支付',pay],
# }
#
# def run():
#     while True:
#         for k in func_dic:
#             print(k,func_dic[k][0])
#
#         choice = input("请输入指令编号: ").strip()
#
#         if choice in func_dic:
#             func_dic[choice][1]()
#         else:
#             print("输入的指令错误")

from lib.common import log

def logout():
    print("退出".center(50,'*'))
    exit()

def login():
    print('登录'.center(50,'*'))
    log("egon刚刚登录了","登录日志","info")
def register():
    print('注册'.center(50,'*'))

def transfer():
    print('转账'.center(50,'*'))
    log("egon刚刚给刘sir转了10个亿","交易日志",'info')

def withdraw():
    print('提现'.center(50,'*'))
    log("egon提现了10个亿","交易日志",'info')

def pay():
    print('支付'.center(50,'*'))
    log('egon支出失败',"交易日志",'error')

func_dic = {
    '0': ['退出',logout],
    '1': ['登录',login],
    '2': ['注册',register],
    '3': ['转账',transfer],
    '4': ['提现',withdraw],
    '5': ['支付',pay],
}

def run():
    while True:
        for k in func_dic:
            print(k,func_dic[k][0])

        choice = input("请输入指令编号: ").strip()

        if choice in func_dic:
            func_dic[choice][1]()
        else:
            print("输入的指令错误")

lib目录下common.py(#内容——>原文件内容)

# import time
# from conf import settings
#
# def log(msg):
#     with open(r'%s' % settings.LOG_PATH,mode='at',encoding='utf-8') as f:
#         f.write("%s %s\n" % (time.strftime("%Y-%m-%d %H:%M:%S"),msg))
#
#  日志路径换成 配置文件可定制
#

import time
import logging.config
from conf import settings

logging.config.dictConfig(settings.LOGGING_DIC)

def log(msg,name,level='info'):
    logger = logging.getLogger(name)
    if level == 'info':
        logger.info(msg)
    elif level == 'warn':
        logger.warning(msg)
    elif level == 'error':
        logger.error(msg)
    elif level == 'critical':
        logger.critical(msg)
posted @ 2021-08-16 21:36  停在夏季  阅读(119)  评论(0编辑  收藏  举报
-->