zoukankan      html  css  js  c++  java
  • python学习之-软件开发的目录规范

    通常软件目录下有几个标准文件夹

    软件主文件夹命名,通常都是大写(ATM_SHOPPING)

    -------------------------------------------------------------------------

    bin : 启动文件文件夹(整个软件的启动文件,也可直接写在根目录下省略这个文件夹) 

    conf : 软件配置文件(软件全局性的一些变量和参数)

    core :用户层(就是一个功能的集合体文件,功能实现通过调用其他的模块)

    db :数据层(数据处理动作模块,存储和调用,这个模块放lib文件夹内也可)

    lib :接口模块文件夹(每一个功能的模块)

    log :日志文件

    Readme.txt 软件介绍的文本

    ---------------------------------------------------------------------------

    bin :start.py  启动文件

    import sys
    import os

    BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #就是取执行文件的绝对路径,然后获取执行文件的目录赋值给一个变量
    sys.path.append(BASE_DIR)
    from core import src
    src.run()

    PS:调用sys和os模块,os模块下有个path模块下有个dirname模块和abspath模块,用abspath获取绝对路径,dirname就是取执行文件的目录,要让其他的模块能够获取这个模块内的数据,往前推几层能够到达项目根目录,那么取几次dirname即可

    PS:有一个内置的全局变量是__file__,是当前执行文件的绝对路径

    PS:sys模块下有一个path模块,指的是环境变量,将变量放入环境变量即可调用所有模块

    conf : setting.py 配置文件

    import os,logging
    BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #动态获取路径,获取当前文件的绝对路径,然后获取执行文件的目录,有几层目录写几次
    file_path=r'%slog ransaction.log' %BASE_DIR #这里将文件的路径以动态方式放入log_path变量以供其他文件调用
    """
    logging配置 #日志管理模块,标准格式化写入日志文件
    """
    logfile_path= r'%slog管理员日志.txt '%BASE_DIR
    user_logfile_path = r'%suser_log用户日志.txt ' %BASE_DIR
    standard_format = '%(asctime)s - %(threadName)s:%(thread)d - task_id:%(name)s - %(filename)s:%(lineno)d'
    '- %(levelname)s - %(message)s'
    simple_format = '%(levelname)s - %(asctime)s - %(filename)s:%(lineno)d - %(message)s'

    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'
    },
    'default': {
    'level': 'DEBUG',
    'class': 'logging.FileHandler',
    'formatter': 'standard',
    'filename': logfile_path,
    'encoding': 'utf-8',
    },
    'user_log': {
    'level': 'INFO',
    'class': 'logging.FileHandler',
    'formatter': 'simple',
    'filename': user_logfile_path,
    'encoding': 'utf-8',
    },
    },
    'loggers': {
    '用户日志': {
    'handlers': ['user_log'],
    'level': 'INFO',
    },
    '管理员日志': {
    'handlers': ['default', 'console'],
    'level': 'DEBUG',
    },
    },
    }



    core : src.py 核心代码 (主要的业务功能,就是一些主功能)

    func_dic={
    '1':login,
    '2':register,
    '3':shopping,
    '4':transfer,
    '5':pay
    }
    def run():
    while True:
    print("""
    0 退出
    1 登录
    2 注册
    3 购物
    4 转账
    5 支付
    """)

    choice =input('请输入操作>>>: ').strip()
    if choice == '0':break
    if choice in func_dic:
    func_dic[choice]()
    else:
    print('输出的指令不存在,请重新输入')

    PS:就是一个首页的功能,软件相关功能所有的集合文件

    db : 调用数据接口的模块

    lib  : 自定义的模块

      项目中共用的功能,主功能需要调用的功能等模块

    common.py(可以将日志模块和装饰器写这个文件内)

    import time
    from conf import settings #从conf文件夹内导入setting模块
    def logger(msg):
    with open(r'%s' %settings.log_path, 'at', encoding='utf-8') as f: #直接获取setting模块内的日志变量
    f.write('%s %s ' % (time.strftime('%Y-%m-%d %H:%M:%S'),msg))

    log : transaction.log(这个根据软件来命名,没有固定格式)

    小常识:

    (一)

    日志功能需要调用时间模块

    import time 

    写入时间功能:time.strftime('%y-%m-%d %H:%M:%S') #(这是固定格式)

    (二)

    项目文件夹放在顶级,建在顶级,就可以在导入模块的时候可以用tab补全,或者弹出提示

    (三)

    启动文件放在项目文件夹的根目录下,就无需处理环境变量,因为软件的根目录就是当前启动文件的文件夹(软件的环境变量都是以执行文件为准)

  • 相关阅读:
    剑指offer——从尾到头打印链表节点的值
    1, sync_with_stdio(), tie()的应用
    Python基础1:一些小知识汇总
    HTML
    CSS
    周总结
    十三章
    十二章总结
    十一章总结
    第十一章
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10017480.html
Copyright © 2011-2022 走看看