Python之第三十天的努力--软件开发规范

Posted szheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之第三十天的努力--软件开发规范相关的知识,希望对你有一定的参考价值。

软件开发规范

  1. 为什么要有软件开发规范?

    app 软件 不可能全部都写在一个文件中,加载效率低,不容易查找,不规范。

    代码越多,你越不可能放在一个文件中,你需要将你的代码分文件。

    软件开发规范。

    技术图片

    技术图片

    技术图片

    技术图片

  2. bin文件夹 --->启动文件starts

    # import src
    # 直接引用不到
    
    
    # 这么做虽然实现了,但是有问题
    
    # 问题一1.项目中的py文件,肯定会互相引用,src 引用 settings,  src 引用 common....
    # import sys
    # sys.path.append(r‘E:pycharmPython世界从0开始学Pythonday17logcore‘)
    #
    # import src
    # src.run()
    # 不能一个一个添加。
    
    
    # 解决问题1:
    # import sys
    # 直接添加blog的目录
    # sys.path.append(r‘E:pycharmPython世界从0开始学Pythonday17log‘)
    #
    # from core import src
    # src.run()
    
    
    
    # 问题2:此项目  在我的计算机中的路径为:E:pycharmPython世界从0开始学Pythonday17log
    # 但是在别人的计算机内就不一定,这样就写死了。
    
    # 解决
    # 动态的获取blog的路径 无论在谁的计算机中,都可以找到blog的绝对路径。
    # import sys
    # import os
    # print(__file__)     # 动态获取本文件的绝对路径
    # print(os.path.dirname(__file__))    # 获取父级的目录
    # print(os.path.dirname( os.path.dirname(__file__) ) )    # 获取爷级的目录
    
    
    ####################以上为思路###################
    
    import sys
    import os
    
    BASE_PATH = os.path.dirname(os.path.dirname(__file__))
    sys.path.append(BASE_PATH)
    
    from core import src
    
    if __name__ == ‘__main__‘:
        src.run()
    
  3. conf文件夹 ---> settings(配置文件)

    import os
    BASE_PATH = os.path.dirname(os.path.dirname(__file__))
    
    username_path = os.path.join(BASE_PATH,‘db‘,‘username‘)
    
  4. core文件夹 ---> src(主逻辑文件)

    from conf import settings
    from lib import common
    
    def table_print():
        ‘‘‘
        打印目录
        ‘‘‘
        print(‘1.请登录‘)
        print(‘2.请注册‘)
        print(‘3.进入文章页面‘)
        print(‘4.进入评论页面‘)
        print(‘5.进入日记页面‘)
        print(‘6.进入收藏页面‘)
        print(‘7.注销账号‘)
        print(‘8.退出整个程序‘)
    
    
    
    
    
    def get_user_pwd():
        ‘‘‘
        获取用户名及密码,加入一个列表中
        @return: user_dict 用户名,密码的字典
        ‘‘‘
        user_dict = {}          # 建立用户名,密码的字典,字典的键为用户名,值为密码
        with open(settings.username_path, encoding=‘utf-8‘) as f:       # 读取包含用户名密码的文件
            for line in f:      # 按行读取,并把用户名,密码分开,填入字典
                line_list = line.strip().split(‘|‘)
                user_dict[line_list[0].strip()] = line_list[1].strip()
        return user_dict
    
    
    def registration():
        ‘‘‘
        注册操作
        @return:
        ‘‘‘
        while 1:
            registration_name = input(‘请输入用户名(只能含有字母或数字):‘)
            registration_pwd = input(‘请输入密码(长度6~14个字符):‘)
            if registration_name.isalnum() and 6 <= len(registration_pwd) <= 14:    # 判断输入的用户名是否符合要求
                u_dict = get_user_pwd()
                if registration_name in list(u_dict.keys()):                        # 用户名存在
                    print(‘您输入的用户名已存在,请重新输入‘)
                else:
                    with open(settings.username_path, encoding=‘utf-8‘, mode=‘a‘) as f2:
                        f2.write(registration_name + ‘|‘ + registration_pwd + ‘
    ‘) # 符合要求者,添加到用户名密码文件中
                    break
            else:
                print(‘您输入的用户名或密码不正确,请重新输入‘)
                continue
        print(‘注册成功‘)
    
    
    # 登录状态字典,用于判断是否有用户已经登录。
    login_status_dict = {
        ‘username‘: None,
        ‘status‘: False,
    }
    
    
    def login():
        ‘‘‘
        登录操作
        @return:
        ‘‘‘
        u_dict = get_user_pwd()
        count = 1
        print(‘请登录‘)
        while count < 4:                                                    # 超过三次登录还未成功,则退出整个程序。
            username = input(‘请输入用户名:‘).strip()
            password = input(‘请输入密码:‘).strip()
            if username in u_dict.keys() and password == u_dict[username]:  # 判断用户名密码是否正确
                print(‘登录成功‘)
                login_status_dict[‘username‘] = username                    # 修改登录状态字典的,登录用户名。
                login_status_dict[‘status‘] = True                          # 修改登录状态字典的,登录状态。
                return True
            else:
                print(‘用户名或密码错误‘)
            count += 1
        print(‘用户名密码输入三次均不正确,自动退出程序。‘)
        return False
    
    
    
    
    
    @common.auth
    def article():
        ‘‘‘
        文章页面
        @return:
        ‘‘‘
    
        while 1:
            print(f‘欢迎{login_status_dict["username"]}进入文章页面‘)
            write_art_num = input(‘选择直接写入内容输入1,选择导入md文件输入2,输入B或b返回上一个页面,输入Q或q直接退出:‘).strip()
            if write_art_num.isdecimal():                                                   # 选择进行的操作
                write_art_num = int(write_art_num)
                if write_art_num == 1:                                                      # 进行直接写入操作
                    article_name = input(‘请输入文件名:‘)
                    article_content = input(‘请输入文件内容:‘)
                    with open(article_name,encoding=‘utf-8‘,mode=‘w‘) as f3:                # 直接写入用户输入的内容
                        f3.write(article_content)
                elif write_art_num == 2:                                                    # 进行md文件写入操作
                    article_name = input(‘请输入md文件的路径:‘)
                    with open(article_name,encoding=‘utf-8‘,mode=‘r‘) as f4,                    open(article_name[:-2] + ‘text‘,encoding=‘utf-8‘,mode=‘w‘) as f5:
                        f5.write(f4.read())                                                 # 读取并写入
                else:
                    print(‘您输入有误,请重新输入‘)
            elif write_art_num.upper() == ‘B‘:                                              # 返回上一页面
                break
            elif write_art_num.upper() == ‘Q‘:                                              # 直接退出程序
                return
        return True
    
    
    @common.auth
    def comment():
        ‘‘‘
        评论页面
        @return:
        ‘‘‘
        print(f‘欢迎{login_status_dict["username"]}进入评论页面‘)
        if back_quit():
            return True
        else:
            return
    
    
    @common.auth
    def dariy():
        ‘‘‘
        日记页面
        @return:
        ‘‘‘
        print(f‘欢迎{login_status_dict["username"]}进入日记页面‘)
        if back_quit():
            return True
        else:
            return
    
    @common.auth
    def collect():
        ‘‘‘
        收藏页面
        @return:
        ‘‘‘
        print(f‘欢迎{login_status_dict["username"]}进入收藏页面‘)
        if back_quit():
            return True
        else:
            return
    
    
    @common.auth
    def cancel_login():
        ‘‘‘
        注销登录
        @return:
        ‘‘‘
        login_status_dict[‘username‘] = None            # 把登录状态字典的登录者姓名改为None
        login_status_dict[‘status‘] = False             # 把登录状态改为False
        print(‘您已注销‘)
    
        if back_quit():
            return True
        else:
            return
    
    
    def back_quit():
        ‘‘‘
        返回或直接退出
        @return:
        ‘‘‘
        while 1:
            s_quit = input(‘输入B或b返回上一个页面,输入Q或q直接退出:‘).strip()
            if s_quit.upper() == ‘B‘:
                break
            elif s_quit.upper() == ‘Q‘:
                return
            else:
                print(‘您输入有误请重新输入‘)
        return True
    
    
    def run():
        ‘‘‘
        主函数
        @return:
        ‘‘‘
        while 1:
            table_print()                                               # 打印目录
            open_num = input(‘请输入您要进行的操作的序号:‘).strip()         # 选择进行的操作
            if open_num.isdecimal():                                    # 判断用户输入的序号是否符合规定
                open_num = int(open_num)                                # 将序号变为int 类型
                if open_num == 1:
                    login()                                             # 执行登录操作
    
                elif open_num == 2:
                    registration()                                      # 执行注册操作
    
                elif open_num == 3:
                    if article():                                       # 进入文章页面
                        continue
                    else:
                        return
    
                elif open_num == 4:
                    if comment():                                       # 进入评论页面
                        continue
                    else:
                        return
    
                elif open_num == 5:
                    if dariy():                                         # 进入日记页面
                        continue
                    else:
                        return
    
                elif open_num == 6:
                    if collect():                                       # 进入收藏页面
                        continue
                    else:
                        return
    
                elif open_num == 7:
    
                    if cancel_login():                                  # 进入注销账号页面
                        continue
                    else:
                        return
    
                elif open_num == 8:
                    return
    
                else:
                    print(‘您输入有误,请重新输入。‘)
    
            else:
                print(‘您输入有误,请重新输入。‘)
    
  5. db文件夹 ---> 存放文本数据

  6. lib文件夹 ---> 存放 common(公共组件):装饰器,日志函数

    from core import src
    
    
    def auth(f):
        ‘‘‘
        判断是否有用户已经登录的装饰器
        @param f: 修饰的函数名
        @return: inner
        ‘‘‘
        def inner(*args,**kwargs):
            if src.login_status_dict[‘status‘]:             # 如果已有用户登录,则直接运行被修饰函数
    
                ret = f(*args,**kwargs)
                return ret
            else:
                if src.login():                             # 如果没有用户登录,则进行登录操作。
                    ret = f(*args,**kwargs)
                    return ret
        return inner
    
  7. log文件夹 ---> 存放 日志文件

以上是关于Python之第三十天的努力--软件开发规范的主要内容,如果未能解决你的问题,请参考以下文章

python 基础之第十天

数学建模学习笔记集训十天之第一天

Python之第七天的努力--基础数据类型补充,编码进阶

Python之第七天的努力--基础数据类型补充,编码进阶

Python之第十八天的努力--装饰器初识

Python之第十九天的努力--复习1