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日(这个时间是痞子衡正式开始 ...
随机推荐
- [.NET开发] C# 读写文件
1.C#读文件 按行读取文件: public void Read(string path) { StreamReader sr = new StreamReader(path,Encoding.Def ...
- English trip V1 - 7.My dream car 我梦想的车 Teacher:Lamb Key: famous for
中华In this lesson you will learn to describe an object(目标). 课上内容(Lesson) famous for 以…著称,闻名 国家(名词) ...
- android--------listview之适配器
ListView之适配器的使用,包含了ArrayAdapter,SimpleAdapter ,BaseAdapter等适配器. 1:ArrayAdapter /**** * * * ArrayAdap ...
- FastDFS install - 2
storage install nginx 1. update dependency package yum -y install pcre-devel openssl openssl-devel g ...
- python-day52--前端html、css
一.html需掌握的: 1. img标签 属性:src alt title width height 2. a标签 属性:href target 3. ul 标签及li 标签,二者都是块级标签 ul ...
- 学习总结(ASP.NET MVC 5)
1. 无论什么时候,如果要写一个新的 MVC 的程序(网站),打开VS之后第一步永远都是“创建新的 ASP.NET MVC 项目” (“新建项目”—→“Web(Visual C#)”—→“ASP.NE ...
- javaScript 变量提升 var let const,以及JS 的解析阶段和执行阶段
我们先来看一道面试题,大家猜想一下,下面这段代码,打印出来的结果是什么 var name = 'World!'; (function () { if (typeof name === 'undefin ...
- POJ 1847 Floyd_wshall算法
前面用dijstra写过了.但是捏.数据很小.也可以用Floyd来写. 注意题目里给出的是有向的权值. 附代码:#include<stdio.h>#include<string.h& ...
- 给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化
给Ajax一个漂亮的嫁衣——Ajax系列之五(下)之序列化和反序列化 标签: ajaxdictionaryjsonobject服务器function 2012-07-25 18:41 2242人阅读 ...
- 使用Messenger 从Activity发送数据到service 通过后台计算结果Log输出;
package com.lixu.messenger; import android.app.Activity; import android.app.Service; import android. ...