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

软件主文件夹命名,通常都是大写(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'%s\log\transaction.log' %BASE_DIR #这里将文件的路径以动态方式放入log_path变量以供其他文件调用
"""
logging配置 #日志管理模块,标准格式化写入日志文件
"""
logfile_path= r'%s\log\管理员日志.txt '%BASE_DIR
user_logfile_path = r'%s\user_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\n' % (time.strftime('%Y-%m-%d %H:%M:%S'),msg))

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

小常识:

(一)

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

import time

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

(二)

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

(三)

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

python学习之-软件开发的目录规范的更多相关文章

  1. python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)

    一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...

  2. [软件开发的目录规范、区分py文件的两种用途]

    [软件开发的目录规范] 软件开发的目录规范 bin: 执行文件 conf: 存放配置文件相关代码 core: 存放源文件,业务逻辑相关代码 db: 存放数据库文件,主要用于与数据库交互 lib: 存放 ...

  3. Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型)

    Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型) 一丶软件开发规范 六个目录: #### 对某 ...

  4. Python 入门之 软件开发规范

    Python 入门之 软件开发规范 1.软件开发规范 -- 分文件 (1)为什么使用软件开发规范: 当几百行--大几万行代码存在于一个py文件中时存在的问题: 不便于管理 修改 可读性差 加载速度慢 ...

  5. 软件开的目录规范+sys,os,time模块

    —————————————————————————————————————————————————————————————————— start.py import sys,os # print(__ ...

  6. python学习day4软件目录结构规范

    为什么要设计好目录结构? 参考:http://www.cnblogs.com/alex3714/articles/5765046.html "设计项目目录结构",就和"代 ...

  7. python模块导入-软件开发目录规范-01

    模块 模块的基本概念 模块: # 一系列功能的结合体 模块的三种来源 """ 模块的三种来源 1.python解释器内置的模块(os.sys....) 2.第三方的别人写 ...

  8. 5.15 python 面向对象的软件开发&领域模型

    1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...

  9. 痞子衡嵌入式:知名半导体MCU大厂软件开发C代码规范

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是飞思卡尔软件开发C语言编码规范. 2020鼠年春节是个漫长的假期,痞子衡在家百无聊赖,翻出了2016年10月1日(这个时间是痞子衡正式开始 ...

随机推荐

  1. Typekit在线字库及使用方法

    一.如果设计中使用了非标准的字体,你该如何去实现? 所谓的标准字体是多数机器上都会有的,或者即使没有也可以由默认字体替代的字体. 方法: 用图片代替 web fonts在线字库,如Google Web ...

  2. Lua 中与字符串有关的函数学习

    string1 = "lua" print(string.upper(string1)) string2 = 'LGS' print(string.lower(string2)) ...

  3. spring boot 2.0 + 静态资源被拦截,怎么办?

    问题描述:使用springboot 2.0后,按照springboot 1.5版本(以下简称旧版)的方式去配置项目.结果发现静态资源访问不到了,本文对此情况分析.处理 项目结构: 直接上图 如果是在旧 ...

  4. English trip -- VC(情景课)2 A At school

    xu言: Sometimes, I feel very confused. However, there will always be a weak light in a corner to ligh ...

  5. 12月13日 什么是help_method,session的简单理解, find_by等finder method

    helper_method Declare a controller method as a helper. For example, helper_method :link_to def link_ ...

  6. android--------ExpandableListView的使用多级列表

    多级列表ExpandableListView 扩展列表能够显示一个指示在每项显示项的当前状态(状态通常是一个扩展的组,组的孩子,或倒塌,最后一个孩子).使用setchildindicator(draw ...

  7. js获取表格视图所选行号的ids

    实例化数组 遍历所选行push到数组中 将数组join转换为以,分割的字符串 /*获取指定id的datagrid的表格视图的选择的ids*/ function getDataGridSelectRow ...

  8. XML删除节点

    XmlDocument doc = new XmlDocument(); doc.Load("Order.xml"); XmlNode xn = doc.SelectSingleN ...

  9. consumer的DubboResponseTimeoutScanTimer线程

    考虑这样一种情况,由于网络延时,consumer先抛出超时异常,一段时间后又收到了已经超时的响应,dubbo是怎么处理的? 拆分为3步看: 1. consumer的DubboResponseTimeo ...

  10. 修改MAC地址的方法(未测试)

    用ioctl控制,通过SIOCGIFHWADDR获取MAC地址,SIOCSIFHWADDR设置MAC地址,不过在设 置MAC地址之前,要先把网卡down掉,设置好了以后,再UP起来. #include ...