• python之代码规范


    第一章 为什么要有规范化目录

    真正的后端开发的项目,系统等,少则几万行代码,多则十几万,几十万行代码

    软件开发,规范你的项目目录结构,代码规范,遵循PEP8规范等等,让你更加清晰,合理开发。

    1.代码分类

    ​ 加载快

    ​ 可读性高

    ​ 查询修改方便

    第二章 分析规范化目录

    1.规划固定的路径

    把文件路径换成常量,相当于读取数据库的地址

    2.settings.py文件

    配置文件

    3.src.py主逻辑核心函数文件

    4.common.py公共组建部分

    5.start.py文件

    6.register用户数据相关,多个文件

    存放用户用户注册的文件

    7.logging日志文件:记录用户的访问次数,用户的动态信息

    8.README 记录项目是做什么的

    第三章 实战演练

    start.py文件

    import sys
    import os
    
    #获取项目的主目录
    # BASE_PATH =os.path.dirname(os.path.dirname(__file__))
    BASE_PATH= "../../博客园"
    sys.path.append(BASE_PATH)
    
    from core.src import run
    if __name__ == '__main__':
    
        run()
    
    

    settings.py文件

    import os
    # BASE_PATH = os.path.dirname(os.path.dirname(__file__))
    REGISTER_PATH = os.path.join("../", 'db', 'register')
    LOG_PATH = os.path.join("../", 'log', 'access.log')
    

    src.py文件

    from conf import settings
    from lib import common
    msg = """
    1.请登录
    2.请注册
    3.进入文章页面
    4.进入评论页面
    5.进入日记页面
    6.进入收藏页面
    7.注销账号
    8.退出整个程序
    >>>
    """
    login_dic = {
        "username":None,
        "flag":False,
        "count":3
    }
    
    
    
    
    def register():
        name = input("请输入要注册的用户名")
        pwd = input("请输入密码")
        with open(settings.REGISTER_PATH, "a", encoding="utf-8") as f:
            if name.isalnum() and 6 < len(pwd) < 14:
                with  open(settings.REGISTER_PATH, "a+", encoding="utf-8") as f:
                    f.seek(0)
                    for i in f:
                        if name in i.strip().split(":"):
                            print("用户名已存在")
                            break
                    else:
                        print("注册成功")
                        f.write(f"{name}:{pwd}
    ")
            else:
                print("用户名或密码输入格式错误!")
        return f"{name}"
    
    
    def login(func=False):
        while login_dic["count"]:
            user = input("username:")
            pwd = input("password:")
            with open(settings.REGISTER_PATH, "r", encoding="utf-8") as u:
                for i in u:
                    k, v = i.strip().split(":")
                    if user == k and pwd == v:
                        login_dic["username"] = user
                        login_dic["flag"] = True
                        login_dic["count"] = 0
                        print("登录成功!")
    
                        if func:
                            func()
                    else:
                        login_dic["count"] -= 1
                        print(f"用户名或密码错误!剩余次数{login_dic['count']}")
                        common.logger.warning('logger warning message')
    @common.auth
    def article():
        print("这是文章")
    
    @common.auth
    def comment():
        print("这是评论")
    
    @common.auth
    def log():
        print("这是日记")
    
    @common.auth
    def collect():
        print("这是收藏")
    
    @common.auth
    def out():
        login_dic["username"] = None
        login_dic["flag"] = False
        print("退出成功!")
    
    func_dic = {
        "1":login,
        "2":register,
        "3":article,
        "4":comment,
        "5":log,
        "6":collect,
        "7":out,
        "8":exit,
    }
    
    def run():
        while True:
            chose = input(msg)
            if chose in func_dic:
                login_dic["count"] = 3
                func_dic[chose]()
            else:
                print("请正确输入内容!")
    
    
    

    common.py

    from core import src
    from conf import settings
    def auth(func):
        def inner(*args,**kwargs):
            if src.login_dic["flag"]:
                func()
            else:
                src.login(func)
    
        return inner
    import logging
    logger = logging.getLogger()
    # 创建一个logger
    fh = logging.FileHandler(settings.LOG_PATH,mode="a",encoding='utf-8')   # 文件
    ch = logging.StreamHandler()   # 屏幕
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(filename)s - [line:%(lineno)d] -  %(levelname)s - %(message)s')
    # 将屏幕和文件都是用以上格式
    logger.setLevel(logging.DEBUG)
    # 设置记录级别
    fh.setFormatter(formatter)
    # 使用自定义的格式化内容
    ch.setFormatter(formatter)
    logger.addHandler(fh) #logger对象可以添加多个fh和ch对象
    logger.addHandler(ch) #打印在屏幕上
    
  • 相关阅读:
    centos7使用163 yum源
    Package has no installation candidate解决方法
    HTML 5 canvas相关
    git rebase 使用总结
    Redis不是只有get set那么简单
    k8s---pod常用操作
    Navigator.sendBeacon 无阻塞发送统计数据
    如何在页面关闭或跳转时优雅的发送Ajax请求
    mysql的触发器、视图、索引,受益匪浅
    杂集:centos7中利用logrotate工具切割tomcat日志
  • 原文地址:https://www.cnblogs.com/zdqc/p/11284404.html
Copyright © 2020-2023  润新知