python程序结构有哪些_Python项目代码结构

#=============>bin目录:存放执行脚本#start.py

importsys,os

BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

sys.path.append(BASE_DIR)from core importcorefrom conf importmy_log_settingsif __name__ == '__main__':

my_log_settings.load_my_logging_cfg()

core.run()#=============>conf目录:存放配置文件#config.ini

[DEFAULT]

user_timeout= 1000[x]

password= 123money= 10000000[y]

password= 123456money=1000[z]

password=qwe123

money=10

#settings.py

importos

config_path=r'%s\%s' %(os.path.dirname(os.path.abspath(__file__)),'config.ini')

user_timeout=10user_db_path=r'%s\%s' %(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),\'db')#my_log_settings.py

"""logging配置"""

importosimportlogging.config#定义三种日志输出格式 开始

standard_format= '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'\'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字

simple_format= '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'id_simple_format= '[%(levelname)s][%(asctime)s] %(message)s'

#定义日志输出格式 结束

logfile_dir= r'%s\log' %os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #log文件的目录

logfile_name= 'all2.log' #log文件名

#如果不存在定义的日志目录就创建一个

if notos.path.isdir(logfile_dir):

os.mkdir(logfile_dir)#log文件的全路径

logfile_path =os.path.join(logfile_dir, logfile_name)#log配置字典

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'},#打印到文件的日志,收集info及以上的日志

'default': {'level': 'DEBUG','class': 'logging.handlers.RotatingFileHandler', #保存到文件

'formatter': 'standard','filename': logfile_path, #日志文件

'maxBytes': 1024*1024*5, #日志大小 5M

'backupCount': 5,'encoding': 'utf-8', #日志文件的编码,再也不用担心中文log乱码了

},

},'loggers': {#logging.getLogger(__name__)拿到的logger配置

'': {'handlers': ['default', 'console'], #这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕

'level': 'DEBUG','propagate': True, #向上(更高level的logger)传递

},

},

}defload_my_logging_cfg():

logging.config.dictConfig(LOGGING_DIC)#导入上面定义的logging配置

logger = logging.getLogger(__name__) #生成一个log实例

logger.info('It works!') #记录该文件的运行状态

if __name__ == '__main__':

load_my_logging_cfg()#=============>core目录:存放核心逻辑#core.py

importloggingimporttimefrom conf importsettingsfrom lib importread_inifrom conf importmy_log_settings#print(__name__)

config =read_ini.read(settings.config_path)

logger= my_log_settings.load_my_logging_cfg(__name__)

current_user={'user':None,'login_time':None,'timeout':int(settings.user_timeout)}defauth(func):def wrapper(*args,**kwargs):if current_user['user']:

interval=time.time()-current_user['login_time']if interval < current_user['timeout']:return func(*args,**kwargs)

name= input('name>>:')

password= input('password>>:')ifconfig.has_section(name):if password == config.get(name,'password'):

logger.info('登录成功')

current_user['user']=name

current_user['login_time']=time.time()return func(*args,**kwargs)else:

logger.error('登录失败')else:

logger.error('用户名不存在')returnwrapper

@authdefbuy():print('buy...')

@authdefrun():print('''购物

查看余额

转账''')whileTrue:

choice= input('>>:').strip()if not choice:continue

if choice == '1':

buy()#=============>db目录:存放数据库文件#x_json#y_json

#=============>lib目录:存放自定义的模块与包#read_ini.py

importconfigparserdefread(config_file):

config=configparser.ConfigParser()

config.read(config_file)returnconfig#=============>log目录:存放日志#all.log

[2018-04-20 00:19:48,587][MainThread:10840][task_id:__main__][my_logsettiing.py:75][INFO][It works!]

[2018-04-20 00:28:29,387][MainThread:9492][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:32:14,803][MainThread:15240][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:39:30,564][MainThread:11216][task_id:__main__][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:39:46,132][MainThread:11216][task_id:__main__][core.py:22][INFO][登录成功]

[2018-04-20 00:41:27,929][MainThread:6644][task_id:core.core][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:41:44,162][MainThread:8620][task_id:core.core][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:41:44,163][MainThread:8620][task_id:__main__][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:41:53,689][MainThread:8620][task_id:core.core][core.py:29][ERROR][用户名不存在]

[2018-04-20 00:44:33,641][MainThread:14012][task_id:__main__][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:44:42,086][MainThread:14012][task_id:__main__][core.py:22][INFO][登录成功]

[2018-04-20 00:47:22,321][MainThread:9460][task_id:__main__][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:47:25,847][MainThread:9460][task_id:__main__][core.py:29][ERROR][用户名不存在]

[2018-04-20 00:51:58,265][MainThread:14784][task_id:core.core][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:51:58,265][MainThread:14784][task_id:__main__][my_log_settings.py:75][INFO][It works!]

[2018-04-20 00:52:14,703][MainThread:14784][task_id:core.core][core.py:22][INFO][登录成功]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值