第十九天 标准目录与time 模块
1.目录规范 *****
(1)文件夹的规范写法
bin 可执行文件
conf 配置文件
core 主要业务逻辑
db 数据文件
lib 库 (公共代码 第三方模块)
log 日志文件
readme 说明文档(是一个文件)
再以上文件夹中 没有需要作为包的 你的包通常放到lib中 但是注意lib不应该作为包
疑惑?
# 这个文件夹到底应该是包还是文件夹 其实问题就是需不需要用到init
# init的作用就是导入包内模块中的全部功能
# 通过判断是不是需要这个功能来判断是包还是文件夹
(2)定制程序的入口
# 总结 程序的入口 主要是将项目的根目录添加到环境变量中
(3)分文件夹之后的模块使用
2.time *****
一 标准目录规范
我们学习了模块和包以后,在开发项目就不应该再是面条版,应该分文件,文件夹,那么有没有什么固定的文件
结构呢?有!这就是我们要说的开发目录规范
我们通过一个例子来说明这些文件夹的作用
案例:编写ATM
#file:"start.py"
def login():
#加载文件
with open("/Users/jerry/PycharmProjects/项目结构/db/db.txt")as f:
print(f.read())
def register():
print('注册'):
def run(): while True:
print(
'''请选择
1.登录
2.注册
'''')
s = input("请选择:")
if s=="":
login()
elif:s =="":
register()
else:
print("error")
1.在atm中我们市要使用到文件的路径,例如日志文件,数据文件等,并且不止一个地方用很多地方都要用,直接将路径写在代码中,是不不可取的,因为你无可避免的会需要修改这些路径;
所以不要直接写在代码中,那应该怎么做?定义为变量可行吗?当然 如此一来,修改的时候只需要修改一次即可!
#file:"start.py"
#数据路径
DB_PATH="/users/jerry/PyvharmPro jects/项目结构/db/db.txt"
#日志路径
LOG_PATH = "/users/jerry/PycharmProjects/项目结构/db/log.txt
def login():
#加载文件
with open("/Users/jerry/PycharmProjects/项目结构/db/db.txt" as f:
print(f.read())
def register():
print("注册")
def run():
while True:
print(
"""请选择
1.登录
2.注册
""")
s = input("请选择:")
if s== "":
login()
elif:s =="":
register()
else:
print("error")
但是当你想一想,此类用于配置程序的变量,应该和你的业务逻辑放在一起吗?显然不应该,所以我们将要
用于配置的信息单独放在一个文件中
#file:"setting.py"
#数据路径
DB_PATH = "/Users/jerry/PycharnProjiects/项目结构/db/db.txt"
#日志路径
LOG_PATH = "/User/jerry/PycharmProjects/项目结构/log/log.txt"
2.在接下来我们需要实现一个道理验证的功能,name这个功能,需要在所有关键操作之前进行验证,也就是
说很多功能中都要调用这个功能.由于start中代码太多我们呢要进行拆分,这样一来.这个登录验证的代码
可以将其放置与一个公共的common中
common.py
#登录验证装饰器
def login_auth()
pass
3.除此之外,还有日志文件log,数据文件db;
4.另外我们可以将程序的业务逻辑和启动代码,进行分离,变成start文件和src文件
start.py专门用于执行启动
src中的业务逻辑,被star调用
这样用户使用时就能很快定位到启动文件
5.在一个启动项目中,可能有多个执行文件那我们可以将其统一到bin文件夹中
最后一个规范的项目目录应包括一下结构
bin
core
conf
lib
db
log
readme(介绍文件)
疑惑:这里的文件夹 是普通文件还是包?
包的本质就是你文件夹,所以在python项目中,文件夹也就是包,name这里的核心问题是应不应该有init文
件?
先明确iinit的作用主要是为了集中所有的功能,让外界方便调用,那我们一个一个来看看是否需要这两个功
能
bin排除他是执行文件不需要被导入
conf配置文件,在你的项目中不可能只有给一个配置文件,比如mysql,oracle,他们明显不是一家,你把他们
的配置全集中到init文件中,只会给自己带来困扰t
core业务逻辑,这其中一定有一个用户关系的入口,用户进入以后只能在这些不同业务中来回执行操作,所以
这个文件夹下的模块是相互调用的关系,不需要集合所有功能给外界调用
db,lib,log没什么好说的明显不需要
那什么样的代码该定义为包?例如你有一个下载文件的模块,这里面可能用到了网络请求叫request.py,
还有文件操作fileopt.py 那就应该将它定义为包,因为这两个文件中的功能都是给别人调用的!
==总结:项目标准结构第一层仅仅是文件夹绝不是包!==
二.定制程序的入口
继续完善程序,四期可以展示用户功能界面 在src中定义run函数,用来启动程序,注意src所在的core中可
能有多个文件,用户在使用时不方便,所以我们程序的入口从src中转移到start.py中
在start.py中导入core下的src并执行run
#file:"start.py"
impiory core.src
cor.src.run()
由于core这个模块并不存在于环境中,所以程序无法运行!
所以第一步:在环境变量中添加core
#file:"start.py"
import sys
sys.path.append(r"C:\\yyh\python\day20\ATM\core") import core.src
core.src.run()
程序执行成功,但是以上写法存在两个问题.
1.除了core,其他的lib,conf就无法使用
为了能够找到所有模块,我们把ATM文件夹加入环境变量
#file:"start.py"
import sys
sys.path.appenf(r"c:\\yyh\python\day20\ATM
2.如果用户的安装路径不同,程序也无法运行
此时我们需要动态的获取当前项目的目录
在一个py文件中可以使用file来获取当前文件的路径
可以通过当前文件路径来获取文件所在的目录 使用os.paht.dirname
最终的代码如下:
#file:"start.py"
import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(__file__)))
sys.path.append(BASE_DIR)
import core.src
core.src.run()
三.使用标准目录后
引用配置文件
在上述案例中我们把文件的路径定义为变量并放在setting.py文件中
那么在src中要使用这些变量 就需要导入conf下的setting.py
由于在启动文件start.py中我们已经将项目根目录添加到path中,所以可以直接导入
#file:"src.py"部分代码
#导入配置文件
from conf import setting def login(): #加载文件 使用配置文件中的路径 with open(setting.DB_PATH( as f: print(f.read())
def register(): print("注册"")
引用自定义模块
为上述案列添加日志功能
#file:"src.py" 部分代码
#日志功能
def logger(msg):
with open("/Users/jerry/PycharmProjects/项目结构/log/log.txt") as f:
f.write(msg)
#导入配置
from conf import setting
def login():
#导入配置文件
with open(setting.DB_PATH) as f:
print(f.read())
logger("xxx登录系统")
def register():
print("注册")
日志功能并不是只有src文件使用 所以我们将它提取为单独的模块
在lib下comon中
#file:"src.py"部分代码
# 导入配置文件获取 日志路径
from conf import setting
#日志功能
def logger(msg)
with open(setting.LOG_PATH) as f:
f.write(msg)
在src中导入日志模块
#file:"src.py" 部分代码
from lib import common
#日志功能
def logger(msg):
with open("/Users/jerry/PycharmProjects/项目结构/log/log.txt") as f:
f.write(msg)
#导入配置文件
from conf import setting
def login():
#加载文件 使用配置文件中的路径
with open(setting.DB_PATH) as f:
print(f.read())
logger("xxx登录系统")
def register():
print("注册")
第十九天 标准目录与time 模块的更多相关文章
- 孤荷凌寒自学python第二十九天python的datetime.time模块
孤荷凌寒自学python第二十九天python的datetime.time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.time模块是专门用来表示纯时间部分的类. ...
- python-网络安全编程第十天(web目录扫描&&fake_useragent模块&&optionParser模块)
前言 昨天的内容没有完成今天花了点时间继续完成了 感觉自己的学习效率太低了!想办法提高学习效率吧 嗯 ,再制定下今天的目标 开始健身. python fake_useragent模块 1.UserAg ...
- python第二十九天-----继续学习第三模块——前几天旅行去了
subprocess模块 import subprocess subprocess.getstatusoutput('dir')#接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结 ...
- 孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9并使用pydocx模块将结果写入word文档
孤荷凌寒自学python第七十九天开始写Python的第一个爬虫9 (完整学习过程屏幕记录视频地址在文末) 今天在上一天的基础上继续完成对我的第一个代码程序的书写. 到今天终于完成了对docx模块针对 ...
- 孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数
孤荷凌寒自学python第四十九天继续研究跨不同类型数据库的通用数据表操作函数 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天继续建构自感觉用起来顺手些的自定义模块和类的代码. 不同类型 ...
- STC8H开发(十五): GPIO驱动Ci24R1无线模块
目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...
- Linux 标准目录结构
初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用的一些核心文件.如操作系统内核.引导程序Grub等. home --- 存储普通用户的个人文件 ftp ...
- javaSE第十九天
第十九天 227 1:异常(理解) 227 (1) 定义 227 a)异常的引入 227 (2)异常的体系 228 (3)异常的处理: 229 A:JVM的默认处理 ...
- Android MAVEN项目标准目录结构
1.标准目录结构: src -main –bin 脚本库 –java java源代码文件 –resources 资源库,会自动复制到classes目录里 –fi ...
随机推荐
- .net排坑篇:负载均衡域名转发的背后
背景 昨天因客户私有部署问题,需要到客户公司去排查问题. 他们是一家外企,各种权限需要提前申请(最大的坑).他们之前部署的一般为单域名,很少部署互联网类型多个域名的情形(第二个坑).这次私有部署总计使 ...
- 9宫拼图小游戏(WPF MVVM实现)
昨天逛论坛,看到一个哥们用WPF做了一个9宫的拼图游戏,发现初学WPF的人都很容易犯一个错误(我也犯过):把WPF当WINFORM用!所以想写一个比较符合WPF风格的版本,于是就抽工作的空余时间做了一 ...
- 使用insert ignore来避免向数据库重复插入数据
mysql中 insert ignore 的使用示例如下: INSERT IGNORE INTO `table_name` (`reportid`, `content`) VALUES (‘11111 ...
- Python_生成器函数进阶_39
def generator(): print(123) content = yield 1 #content接收的是send传的值 print('=======',content) print(456 ...
- (第十三周)Final阶段用户调查报告
项目名:食物链教学工具 组名:奋斗吧兄弟 组长:黄兴 组员:李俞寰.杜桥.栾骄阳.王东涵 用户调查报告 调查时间:2016年12月1日 21:00——2016年12月3日 12:00 项目分享链接 ...
- JoinPoint
“JoinPoint对象封装了SpringAop中切面方法的信息,在切面方法中添加JoinPoint参数,就可以获取到封装了该方法信息的JoinPoint对象. ” JoinPoint适用于注解和Sc ...
- mybatis配置文件配错
UG] 2017-10-04 20:04:30,582(137226) --> [http-bio-8082-exec-9] org.springframework.web.servlet.ha ...
- Individual Project "写一个能自动生成小学四则运算题目的程序"
一.题目简介 写一个能自动生成小学四则运算题目的程序. 初步拟定要实现的功能后,估计一下自己需要花多长时间.编程过程中记录自己实际用了多长时间. 然后和同学们比较一下各自程序的功能.实现方法的异同等等 ...
- 现代程序设计 homework-06
写代码爽还是读代码爽? 当然是写代码爽好吧... 读代码明显是读+写两倍的工作量好么... 本次作业要求: 1) 把程序编译通过, 跑起来. 读懂程序,在你觉得比较难懂的地方加上一些注释,这样大家就能 ...
- js 通过url获取里面的参数值
场景描述:当我们从一个页面要带有一两个值跳转到另一个页面,另一个页面要使用这些参数的时候,我们就需要通过js获取这些参数啦. 先贴上代码: function getQueryString(name) ...