标签:识别 项目启动 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()
‘‘‘ 这里是程序的入口 在这里写一些项目的核心代码 # 可以先用空函数来罗列功能,把功能框架搭好,然后再慢慢去完善代码 ‘‘‘ def register(): pass def login(): pass def shopping(): pass # 这个是start.py 文件导入的开始文件,必须和那边名字一样 def run(): print("run了") pass
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) # 其他配置信息
将上述三个文件写完,就可以直接在 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]()
‘‘‘ 这里编写登录验证装饰器 由于需要用到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
标签:识别 项目启动 name 地方 使用 数据 引入 port 为什么
原文地址:https://www.cnblogs.com/suwanbin/p/11196346.html