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()
    
  • 相关阅读:
    FileWriter写数据路径问题及关闭和刷新方法的区别
    FileWriter剖析
    2018-10-27 22:44:33 c language
    2018-10-23 23:29:54 clanguage
    Just write about
    2018-10-19 00:13:35 ArrayList
    2018-10-18 22:15:32 c language
    Why do collection classes appear
    2018-10-17 22:20:39 c language
    2018-10-16 22:56:13 c language
  • 原文地址:https://www.cnblogs.com/styxr/p/12178316.html
Copyright © 2011-2022 走看看