真正的后端开发的项目,系统等,少则几万行代码,多则十几万,几十万行代码python
软件开发,规范你的项目目录结构,代码规范,遵循PEP8规范等等,让你更加清晰,合理开发。数据库
1.代码分类后端
加载快app
可读性高函数
查询修改方便3d
1.规划固定的路径日志
把文件路径换成常量,至关于读取数据库的地址代码规范
2.settings.py文件code
配置文件orm
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}\n") 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) #打印在屏幕上