码迷,mamicode.com
首页 > 编程语言 > 详细

python模块基础-软件开发目录规范-01

时间:2019-07-16 18:30:37      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:识别   项目启动   name   地方   使用   数据   引入   port   为什么   

模块

模块的基本概念

模块:

模块的三种来源:

模块的四种表现形式:

为什么用模块:

模块引入

 

循环导入

 

循环导入解决

 

导入模块的查找顺序

 

相对导入与绝对导入

 

 

 

软件开发目录规范

软件基本目录结构

技术图片

技术图片
‘‘‘
项目名
    bin ..........执行文件
         start.py --------项目启动文件
        
    conf ..........里面放的是一些变量与值的对应关系,不常变动的值(常量)
         settings.py --------项目配置文件
        
    core ..........核心逻辑代码
         src.py --------项目核心逻辑文件
        
    db ..........数据库相关信息
         modles.py --------项目存储数据库
        
    lib ..........一些公共的功能
         common.py --------项目所用到的一些公共的功能
        
    log ..........日志 记录用户行为
         view.log --------项目的日志文件
        
    readme.md ..........这款软件的介绍...........

    如果把启动文件放在项目根目录,只需要BASE_DIR 改一下就行了
‘‘‘
各目录作用

各文件基本内容

技术图片
‘‘‘
歩鄹:
    1.拼接项目的根路径。放到项目的环境变量里
    2.导入项目核心入口文件(core/src.py),加判断,在此文件作为执行文件被加载的时候运行项目核心入口文件(core/src.py)(被导入时不执行)
‘‘‘
import os
import sys
# .................歩鄹一
# 这里是在拼接文件目录,因为不同操作系统表示文件路径的间隔符不一致,所以需要用到模块来拼接路径
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# # 如果是把软件的启动文件(start.py)放到了项目的根目录,则使用下面的路径
# BASE_DIR = os.path.dirname(__file__)


# 将拼接好的路径放到 sys.path 中,方便后续import 模块的时候可以直接从项目根目录出发(查找顺序,找不到,然后找到了这里)
sys.path.append(BASE_DIR)

# .................歩鄹二
# 这里请忽略pycharm的报错,pycharm还不能做到这么智能地去识别这个模块存不存在,按照简单的规则去找找不到
from core import src
if __name__ == __main__:
    src.run()
bin/start.py
技术图片
‘‘‘
这里是程序的入口
    在这里写一些项目的核心代码   # 可以先用空函数来罗列功能,把功能框架搭好,然后再慢慢去完善代码

‘‘‘


def register():
    pass


def login():
    pass


def shopping():
    pass


# 这个是start.py 文件导入的开始文件,必须和那边名字一样
def run():
    print("run了")
    pass
core/src.py
技术图片
import os
import sys

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# 如果start.py 是在项目根目录,则使用下方的 BASE_DIR
# BASE_DIR = os.path.dirname(__file__)
sys.path.append(BASE_DIR)

# 其他配置信息
conf/settings.py 要用到才会导入这个(文件)模块

  将上述三个文件写完,就可以直接在 start.py 右键运行将程序跑起来了,现阶段简单的部分其他文件夹用不太到

  tips:pycharm会自动把项目根目录加到 sys.path 里面去,但我们还是要在 bin/start.py 里配置 BASE_DIR,因为软件写来是给别人用的(换了台电脑,位置什么变了,不用pycharm什么的,你也得确保它能跑起来)

 通用方法编写(为方法加上过滤条件,需要登录才能购物),让其他方法也能用上这个登录验证,只需要改动一下 core/src.py 与 lib/common.py 即可,其他要的地方再导入

技术图片
‘‘‘
给shopping方法添加了登录验证装饰器,需要登陆成功才能购物

‘‘‘
# 这里需要把通用模块里写好的登录验证倒过来,然后装饰器调用
from lib import common  # 请忽略pycharm报错,写好运行一下你就知道没问题了

def register():
    print("注册")
    pass


def login():
    while True:
        username = input("Please input your username>>>:").strip()
        pwd = input("Please input your password>>>:").strip()
        if username == jason and pwd == 123:
            print("登录成功")
            login_status[is_login] = True
            break
        print("您的账号或密码有误,请重新登陆!")


# 这个是common 模块写的登录验证
@common.login_auth
def shopping():
    print(购物)


login_status = {
    is_login: None
}

func_list = {
    0: [register, 注册],
    1: [login, 登录],
    2: [shopping, 购物],
}


# 这个是start.py 文件导入的开始文件,必须和那边名字一样
def run():
    print("----功能清单如下----")
    for i in func_list:
        print(f"{i}. {func_list.get(i)[1]}")
    choice = input("请输入功能编号>>>:").strip()
    if choice in func_list:
        func_list.get(choice)[0]()
core/src.py 实现购物登录验证
技术图片
‘‘‘
这里编写登录验证装饰器
    由于需要用到src.py 中的 login_status、login方法,所以要把 src 导入进来

‘‘‘
from core import src


# 登录验证装饰器
def login_auth(func):
    def inner(*args, **kwargs):
        # 检查用户登录
        if not src.login_status.get(is_login):
            print("请先登录!")
            src.login()
        res = func(*args, **kwargs)
        return res
    return inner
lib/common.py 实现登录验证装饰器

 

python模块基础-软件开发目录规范-01

标签:识别   项目启动   name   地方   使用   数据   引入   port   为什么   

原文地址:https://www.cnblogs.com/suwanbin/p/11196346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!