• 拆目录


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

    #start.pyimport sys,os

     

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

    sys.path.append(BASE_DIR)

    from core import corefrom conf import my_log_settings

    if __name__ == '__main__':

        my_log_settings.load_my_logging_cfg()

        core.run()

     

     

     

     

    #=============>conf目录:存放配置文件

    #config.ini[DEFAULT]

    user_timeout = 1000

     

    [egon]

    password = 123

    money = 10000000

     

    [alex]

    password = alex3714

    money=10000000000

     

    [yuanhao]

    password = ysb123

    money=10

     

     

     

     

     

     

    #settings.pyimport os

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

    user_timeout=10

    user_db_path=r'%s\%s' %(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),

                         'db')

     

    #my_log_settings.py"""

    logging配置"""

    import osimport logging.config

     

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

    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' 

                      '[%(levelname)s][%(message)s]' #其中namegetlogger指定的名字

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

     

    id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'

     

    # 定义日志输出格式 结束

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

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

    # 如果不存在定义的日志目录就创建一个if not os.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,  # 向上(更高levellogger)传递        },

        },

    }

     

    def load_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.pyimport loggingimport timefrom conf import settingsfrom lib import read_ini

     

    config=read_ini.read(settings.config_path)

    logger=logging.getLogger(__name__)

     

    current_user={'user':None,'login_time':None,'timeout':int(settings.user_timeout)}def auth(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>>: ')

            if config.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('用户名不存在')

     

        return wrapper

     

    @authdef buy():

        print('buy...')

     

    @authdef run():

     

        print('''

    购物

    查看余额

    转账

        ''')

        while True:

            choice = input('>>: ').strip()

            if not choice:continue

            if choice == '1':

                buy()

     

     

    if __name__ == '__main__':

        run()

    #=============>db目录:存放数据库文件

    #alex_json

    #egon_json

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

    #read_ini.pyimport configparserdef read(config_file):

        config=configparser.ConfigParser()

        config.read(config_file)

        return config

    #=============>log目录:存放日志

    #all2.log

    [2017-07-29 00:31:40,272][MainThread:11692][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]

    [2017-07-29 00:31:41,789][MainThread:11692][task_id:core.core][core.py:25][ERROR][用户名不存在]

    [2017-07-29 00:31:46,394][MainThread:12348][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]

    [2017-07-29 00:31:47,629][MainThread:12348][task_id:core.core][core.py:25][ERROR][用户名不存在]

    [2017-07-29 00:31:57,912][MainThread:10528][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]

    [2017-07-29 00:32:03,340][MainThread:12744][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]

    [2017-07-29 00:32:05,065][MainThread:12916][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]

    [2017-07-29 00:32:08,181][MainThread:12916][task_id:core.core][core.py:25][ERROR][用户名不存在]

    [2017-07-29 00:32:13,638][MainThread:7220][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]

    [2017-07-29 00:32:23,005][MainThread:7220][task_id:core.core][core.py:20][INFO][登录成功]

    [2017-07-29 00:32:40,941][MainThread:7220][task_id:core.core][core.py:20][INFO][登录成功]

    [2017-07-29 00:32:47,222][MainThread:7220][task_id:core.core][core.py:20][INFO][登录成功]

    [2017-07-29 00:32:51,949][MainThread:7220][task_id:core.core][core.py:25][ERROR][用户名不存在]

    [2017-07-29 00:33:00,213][MainThread:7220][task_id:core.core][core.py:20][INFO][登录成功]

    [2017-07-29 00:33:50,118][MainThread:8500][task_id:conf.my_log_settings][my_log_settings.py:75][INFO][It works!]

    [2017-07-29 00:33:55,845][MainThread:8500][task_id:core.core][core.py:20][INFO][登录成功]

    [2017-07-29 00:34:06,837][MainThread:8500][task_id:core.core][core.py:25][ERROR][用户名不存在]

    [2017-07-29 00:34:09,405][MainThread:8500][task_id:core.core][core.py:25][ERROR][用户名不存在]

    [2017-07-29 00:34:10,645][MainThread:8500][task_id:core.core][core.py:25][ERROR][用户名不存在]

        

    看图指示

    2.看图指示

    3.看图指示

  • 相关阅读:
    关于.NET2.0下的脱机文件App_Offline.htm文件
    VS2005中安装AJAX指南
    Ajax中“Sys未定义”错误的解决方法汇总
    GridView控件模板列中的按钮单击时,在RowDataBound事件中获取该行行号
    用户控件中使用User.Identity
    同一个页面中的不同Button分别验证某一部分输入控件
    hdu Tempter of the Bone
    acm steps chapter1总结
    ORACLE中的TOPN查询(TOPN分析),分页查询
    MySQL中如何实现select top n
  • 原文地址:https://www.cnblogs.com/liurenli/p/10116254.html
Copyright © 2020-2023  润新知