zoukankan      html  css  js  c++  java
  • python第十七天

    python第十七天

    软件开发规范

    • bin starts 启动文件

    • conf settings 配置文件

    • core src 主逻辑课

    • db register 文本数据

    • lib common 公共组件:装饰器,日志函数

    • log access.log 日志文件

      import sys
      import os
      print(__file__)#获取本文件路径
      print(os.path.dirname(__file__))获取本文件父路径
      print(os.path.dirname(os.path.dirname(__file__)))+1
      
      # import src
      # 直接引用不到,他不在内存,内置,sys.path
      '''
      # 这么做虽然实现,但是有问题:
      # 1, 项目中的这些py文件,肯定会互相引用,src 引用 settings, src 引用 commom.py.....
      import sys
      sys.path.append(r'D:python_22day18logcore')
      sys.path.append(r'D:python_22day18logconf')
      sys.path.append(r'D:python_22day18loglib')
      .......
      print(sys.path)
      import src
      src.run()
      # 上面肯定是不行,low,我不能一个一个添加.
      
      '''
      
      # import sys
      # # 我直接添加blog的目录
      # sys.path.append(r'D:python_22day18log')
      # from core import src
      # # print(sys.path)
      # src.run()
      
      '''
      # 问题2: 此项目 在我的计算机中 他的路径D:python_22day18log 写死了.
      # 动态的获取blog的路径 无论在谁的计算机中,都可以找到blog的绝对路径.
      import sys
      # 我直接添加blog的目录
      sys.path.append(r'D:python_22day18log')
      from core import src
      # print(sys.path)
      src.run()
      '''
      # import sys
      # import os
      # print(__file__) #动态获取本文件的绝对路径
      # print(os.path.dirname(__file__))  # 获取父级的目录
      # print(os.path.dirname(os.path.dirname(__file__)))  # 获取爷级的目录 D:/python_22/day18/blog
      
      ####################  以上是思路
      
      import os
      import sys
      
      BASE_PATH = os.path.dirname(os.path.dirname(__file__))
      sys.path.append(BASE_PATH)
      from core import src
      
      if __name__ == '__main__':
          src.run()
      
      

    博客园

    '''
    作业:用代码模拟博客园系统。
    
    项目分析:
    一.首先程序启动,页面显示下面内容供用户选择:
    
    1.请登录
    2.请注册
    3.进入文章页面
    4.进入评论页面
    5.进入日记页面
    6.进入收藏页面
    7.注销账号
    8.退出整个程序
    
    二.必须实现的功能:
    
    1.注册功能要求:
    a.用户名、密码要记录在文件中。
    b.用户名要求:只能含有字母或者数字不能含有特殊字符并且确保用户名唯一。
    c.密码要求:长度要在6~14个字符之间。
    d.超过三次登录还未成功,则退出整个程序。
    
    2.登录功能要求:
    a.用户输入用户名、密码进行登录验证。
    b.登录成功之后,才可以访问3~7选项,如果没有登录或者登录不成功时访问3~7选项,不允许访问,让其先登录。(装饰器)
    
    3.进入文章页面要求:
    a.提示欢迎xx进入文章页面。
    b.此时用户可以选择:直接写入内容,还是导入md文件。
    ①如果选择直接写内容:让学生直接写文件名|文件内容......最后创建一个文章。
    
    ②如果选择导入md文件:让用户输入已经准备好的md文件的文件路径(相对路径即可:比如函数的进阶.md),然后将此md文件的全部内容写入文章(函数的进阶.text)中。
    
    4.进入评论页面要求:
    提示欢迎xx进入评论页面。
    
    5.进入日记页面要求:
    提示欢迎xx进入日记页面。
    6.进入收藏页面要求:
    提示欢迎xx进入收藏页面。
    
    7.注销账号要求:
    不是退出整个程序,而是将已经登录的状态变成未登录状态(访问3~7选项时需要重新登录)。
    
    8.退出整个程序要求:
    就是结束整个程序。
    '''
    status_dict = {
        'username': None,
        'status': False,
    }
    
    register_path = r'D:python_22day18log
    egister'
    
    def get_user_pwd():
    	user_dict = {}
    	with open(register_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 login():
        u_dict = get_user_pwd()
        count = 1
        while count < 4:
            username = input('请输入用户名:').strip()
            password = input('请输入密码:').strip()
            if username in u_dict and password == u_dict[username]:
                print('登录成功')
                status_dict['username'] = username
                status_dict['status'] = True
                return True
            else:
                print('用户名密码错误....重新登录')
            count += 1
    
    
    def register():
        pass
    
    
    def auth(f):
        '''
        你的装饰器完成:访问被装饰函数之前,写一个三次登录认证的功能。
        登录成功:让其访问被装饰得函数,登录没有成功,不让访问。
        :param f:
        :return:
        '''
        def inner(*args,**kwargs):
            '''访问函数之前的操作,功能'''
            if status_dict['status']:
                ret = f(*args,**kwargs)
                '''访问函数之后的操作,功能'''
                return ret
            else:
                if login():
                    ret = f(*args, **kwargs)
                    return ret
        return inner
    
    
    
    @auth  # article = auth(article)
    def article():
        print('欢迎访问文章页面')
    
    @auth
    def comment():
        print('欢迎访问评论页面')
    
    @auth
    def dariy():
        print('欢迎访问日记页面')
    
    @auth
    def collections():
        print('欢迎访问收藏页面')
    
    def login_out():
        pass
    
    def _quit():
        pass
    
    
    
    # 下面写法不好
    # while 1:
    #     print('''
    #     1.请登录
    #     2.请注册
    #     3.进入文章页面
    #     4.进入评论页面
    #     5.进入日记页面
    #     6.进入收藏页面
    #     7.注销账号
    #     8.退出整个程序
    #     ''')
    #     num = input('请输入序号:').strip()
    #     if num == '1':
    #         login()
    #     elif num == '2':
    #         register()
    
    
    dic = {
        1: login,
        2: register,
        3: article,
        4: comment,
        5: dariy,
        6: collections,
        7: login_out,
        8: _quit,
    }
    
    def run():
        while 1:
            print('''
                1.请登录
                2.请注册
                3.进入文章页面
                4.进入评论页面
                5.进入日记页面
                6.进入收藏页面
                7.注销账号
                8.退出整个程序
                ''')
            num = input('请输入选项').strip()
            num = int(num)
            dic[num]()
    
    run()
    
  • 相关阅读:
    fullCalendar改造计划之带农历节气节假日的万年历(转)
    Linked List Cycle
    Remove Nth Node From End of List
    Binary Tree Inorder Traversal
    Unique Binary Search Trees
    Binary Tree Level Order Traversal
    Binary Tree Level Order Traversal II
    Plus One
    Remove Duplicates from Sorted List
    Merge Two Sorted Lists
  • 原文地址:https://www.cnblogs.com/styxr/p/12178316.html
Copyright © 2011-2022 走看看