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日(这个时间是痞子衡正式开始 ...
随机推荐
- 610D - Vika and Segments(线段树+扫描线+离散化)
扫描线:http://www.cnblogs.com/scau20110726/archive/2013/04/12/3016765.html 看图,图中的数字是横坐标离散后对应的下标,计算时左端点不 ...
- ZendFramework中实现自动加载models
最近自学Zendframework中,写Controller的时候总要require model下的类文件,然后才能实例化,感觉非常不爽 Google了许久,找到个明白人写的方法不错,主要就是修改ap ...
- 手把手教你开发jquery插件
I have said that i dislike jQuery UI’s unified API, so i want to get the instance of the component a ...
- table maker's delimma
table maker's delimma是计算机浮点数精度的一个问题. 浮点数的表示方式 计算机能表示的数字都是有理数,所有的有理数都可以归结为下面的模式:1.@@@ × 2#### 其中,@@@ ...
- java concurrent包的实现原理
由于java的CAS同时具有 volatile 读和volatile写的内存语义,因此Java线程之间的通信现在有了下面四种方式: A线程写volatile变量,随后B线程读这个volatil ...
- codeforces 1042d//Petya and Array// Codeforces Round #510 (Div. 2)
题意:给出一个数组,求其中和小于t的区间数. 先计算前缀和数组sum[i].对当前的sum[i],查询树状数组中有几个比(sum[i]-t)大的数,那么用sum[i]减它就是一个合法区间.再将当前的s ...
- 『Pandas』数据读取&DataFrame切片
读取文件 numpy.loadtxt() import numpy as np dataset_filename = "affinity_dataset.txt" X = np.l ...
- hdu6398 计算几何
不算严格的计算几何,就是各种分类 精度调好就能过,考虑三条边斜着放的所有情况即可 #include<bits/stdc++.h> #define LL long long #define ...
- Eureka服务注册过程详解之IpAddress(详解eureka.instance.prefer-ip-address = true 与 eureka.instance.prefer-ip-address)
分析,eureka.instance.prefer-ip-address 本节解释为什么配置eureka.instance.prefer-ip-address = true时,注册到Eureka Se ...
- ubuntu下没有Language Support
sudo apt-get installlanguage-selector-gnome