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

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

软件开发,规范你的项目目录结构,代码规范,遵循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}\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) #打印在屏幕上

最新文章

  1. 浅谈系列之 javascript原型与对象
  2. 【转】基于linux下的dm9000网卡移植全分析
  3. ie6,ie7,ie8 css bug兼容解决方法
  4. codeforces 286 div2 B
  5. 利用gitHub搭建博客
  6. hdu3746 KMP
  7. lua序列化(支持循环引用)
  8. EXTJS 4.2 资料 跨域的问题
  9. 简单理解前端web开发的MVC模式
  10. Linux下安装Nginx1.9.3-0303(本人亲手实践)
  11. 常用 Linux 命令
  12. Cuts the cake_hdu_2134.java
  13. mybatis写demo时遇到的问题
  14. 【转】如何查看linux版本 如何查看LINUX是多少位
  15. js控制父子页面传值(iframe和window.open)
  16. Oracle自动备份.bat 最新更新(支持Win10了)
  17. &quot;fatal: protocol error: bad line length character: No This&quot;
  18. 流行框架angular
  19. SQLSERVER 实现三元运算符
  20. mac下使用apktool反编译

热门文章

  1. BZOJ 4386 Luogu P3597 [POI2015]Wycieczki (矩阵乘法)
  2. [VIJOS2055][SDOI2019]移动金币:DP+组合数学
  3. JS框架_(JQbar.js)柱状图动态百分比进度条特效
  4. 12.并发编程--Queue
  5. 2019秋Java学期课程总结
  6. Java中 intValue,parseInt,Valueof 这三个关键字的区别
  7. 字面常量 kotlin(2)
  8. Ruby小白入门笔记之&lt;个人记录档&gt;
  9. 阶段3 2.Spring_10.Spring中事务控制_7 spring基于注解的声明式事务控制
  10. Java学习之==&gt;面向对象编程 Part2