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'%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学习之-软件开发的目录规范的更多相关文章
- python-模块入门二(模块循环导入,区分python文件的两种用途,模块搜索路径,软件开发的目录规范)
一.模块的循环导入问题 run.py # import m1 # 第一次导入 m1.py # 错误示范 ''' print('正在导入m1') from m2 import y #第一次导入m2 x= ...
- [软件开发的目录规范、区分py文件的两种用途]
[软件开发的目录规范] 软件开发的目录规范 bin: 执行文件 conf: 存放配置文件相关代码 core: 存放源文件,业务逻辑相关代码 db: 存放数据库文件,主要用于与数据库交互 lib: 存放 ...
- Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型)
Python进阶(十)----软件开发规范, time模块, datatime模块,random模块,collection模块(python额外数据类型) 一丶软件开发规范 六个目录: #### 对某 ...
- Python 入门之 软件开发规范
Python 入门之 软件开发规范 1.软件开发规范 -- 分文件 (1)为什么使用软件开发规范: 当几百行--大几万行代码存在于一个py文件中时存在的问题: 不便于管理 修改 可读性差 加载速度慢 ...
- 软件开的目录规范+sys,os,time模块
—————————————————————————————————————————————————————————————————— start.py import sys,os # print(__ ...
- python学习day4软件目录结构规范
为什么要设计好目录结构? 参考:http://www.cnblogs.com/alex3714/articles/5765046.html "设计项目目录结构",就和"代 ...
- python模块导入-软件开发目录规范-01
模块 模块的基本概念 模块: # 一系列功能的结合体 模块的三种来源 """ 模块的三种来源 1.python解释器内置的模块(os.sys....) 2.第三方的别人写 ...
- 5.15 python 面向对象的软件开发&领域模型
1.面向对象的软件开发 参考地址::http://www.cnblogs.com/linhaifeng/articles/6182264.html#_label14 面向对象的软件工程包括下面几个部: ...
- 痞子衡嵌入式:知名半导体MCU大厂软件开发C代码规范
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是飞思卡尔软件开发C语言编码规范. 2020鼠年春节是个漫长的假期,痞子衡在家百无聊赖,翻出了2016年10月1日(这个时间是痞子衡正式开始 ...
随机推荐
- 8天掌握EF的Code First开发
C#高级知识点&(ABP框架理论学习高级篇)——白金版 http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent.html
- LeetCode--038--报数(*)
问题描述: 报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作 "one ...
- 一些有趣的使用function
转载来源:新人必看的短小而精悍的javascript function 1.回到顶部,优点使用浏览器刷新频率的requestAnimationFrame,很顺滑 const scrollToTop = ...
- 43 HTML CSS
第一部分: 1.meta 标签中:meta 标签中 <meta http-equvi = "refresh" content="2;URL= https://www ...
- MySQL查看一个表的创建文本以及删除表某列的索引
#查看vrv_paw_area创建文本,使用这句话主要是为了找到该表对应字段上的索引名称show create table vrv_paw_area; #删除vrv_paw_area表的‘name’索 ...
- bootstrap modal关闭滚动条自动会跳回最顶端问题记录
原因:使用了a标签当按钮触发modal关闭的时候就会自动跳回浏览器最顶端 解决方案: 不要使用a标签就行了
- List原理
ArrayList: ArrayList是一个可变数组实现,实现了List接口的所有方法,并允许存取null值.ArrayList基本上等同与Vector,但它只对writeObject()和read ...
- pos提交提交数据时碰到Django csrf
我的github(PS:希望star):https://github.com/thWinterSun/v-admin 最近在用Vue写前端代码,再用vue-resource向后台提交数据.项目后台是用 ...
- JavaScript学习总结(一)——JavaScript基础
一.JavaScript语言特点 1.1.JavaScript是基于对象和事件驱动的(动态的) 它可以直接对用户或客户输入做出响应,无须经过Web服务程序.它对用户的响应,是采用以事件驱动的方式进行的 ...
- ArrayList Vector LinkedList(一)
ArrayList Vector LinkedList 区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素, ...