标签:mode comm 成功 col with open 思路 lang quit strip
app 软件 不可能全部都写在一个文件中,加载效率低,不容易查找,不规范。
代码越多,你越不可能放在一个文件中,你需要将你的代码分文件。
软件开发规范。
# import src
# 直接引用不到
# 这么做虽然实现了,但是有问题
# 问题一1.项目中的py文件,肯定会互相引用,src 引用 settings, src 引用 common....
# import sys
# sys.path.append(r‘E:\pycharm\Python世界\从0开始学Python\day17\blog\core‘)
#
# import src
# src.run()
# 不能一个一个添加。
# 解决问题1:
# import sys
# 直接添加blog的目录
# sys.path.append(r‘E:\pycharm\Python世界\从0开始学Python\day17\blog‘)
#
# from core import src
# src.run()
# 问题2:此项目 在我的计算机中的路径为:E:\pycharm\Python世界\从0开始学Python\day17\blog
# 但是在别人的计算机内就不一定,这样就写死了。
# 解决
# 动态的获取blog的路径 无论在谁的计算机中,都可以找到blog的绝对路径。
# import sys
# import os
# print(__file__) # 动态获取本文件的绝对路径
# print(os.path.dirname(__file__)) # 获取父级的目录
# print(os.path.dirname( os.path.dirname(__file__) ) ) # 获取爷级的目录
####################以上为思路###################
import sys
import os
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_PATH)
from core import src
if __name__ == ‘__main__‘:
src.run()
import os
BASE_PATH = os.path.dirname(os.path.dirname(__file__))
username_path = os.path.join(BASE_PATH,‘db‘,‘username‘)
from conf import settings
from lib import common
def table_print():
‘‘‘
打印目录
‘‘‘
print(‘1.请登录‘)
print(‘2.请注册‘)
print(‘3.进入文章页面‘)
print(‘4.进入评论页面‘)
print(‘5.进入日记页面‘)
print(‘6.进入收藏页面‘)
print(‘7.注销账号‘)
print(‘8.退出整个程序‘)
def get_user_pwd():
‘‘‘
获取用户名及密码,加入一个列表中
@return: user_dict 用户名,密码的字典
‘‘‘
user_dict = {} # 建立用户名,密码的字典,字典的键为用户名,值为密码
with open(settings.username_path, encoding=‘utf-8‘) as f: # 读取包含用户名密码的文件
for line in f: # 按行读取,并把用户名,密码分开,填入字典
line_list = line.strip().split(‘|‘)
user_dict[line_list[0].strip()] = line_list[1].strip()
return user_dict
def registration():
‘‘‘
注册操作
@return:
‘‘‘
while 1:
registration_name = input(‘请输入用户名(只能含有字母或数字):‘)
registration_pwd = input(‘请输入密码(长度6~14个字符):‘)
if registration_name.isalnum() and 6 <= len(registration_pwd) <= 14: # 判断输入的用户名是否符合要求
u_dict = get_user_pwd()
if registration_name in list(u_dict.keys()): # 用户名存在
print(‘您输入的用户名已存在,请重新输入‘)
else:
with open(settings.username_path, encoding=‘utf-8‘, mode=‘a‘) as f2:
f2.write(registration_name + ‘|‘ + registration_pwd + ‘\n‘) # 符合要求者,添加到用户名密码文件中
break
else:
print(‘您输入的用户名或密码不正确,请重新输入‘)
continue
print(‘注册成功‘)
# 登录状态字典,用于判断是否有用户已经登录。
login_status_dict = {
‘username‘: None,
‘status‘: False,
}
def login():
‘‘‘
登录操作
@return:
‘‘‘
u_dict = get_user_pwd()
count = 1
print(‘请登录‘)
while count < 4: # 超过三次登录还未成功,则退出整个程序。
username = input(‘请输入用户名:‘).strip()
password = input(‘请输入密码:‘).strip()
if username in u_dict.keys() and password == u_dict[username]: # 判断用户名密码是否正确
print(‘登录成功‘)
login_status_dict[‘username‘] = username # 修改登录状态字典的,登录用户名。
login_status_dict[‘status‘] = True # 修改登录状态字典的,登录状态。
return True
else:
print(‘用户名或密码错误‘)
count += 1
print(‘用户名密码输入三次均不正确,自动退出程序。‘)
return False
@common.auth
def article():
‘‘‘
文章页面
@return:
‘‘‘
while 1:
print(f‘欢迎{login_status_dict["username"]}进入文章页面‘)
write_art_num = input(‘选择直接写入内容输入1,选择导入md文件输入2,输入B或b返回上一个页面,输入Q或q直接退出:‘).strip()
if write_art_num.isdecimal(): # 选择进行的操作
write_art_num = int(write_art_num)
if write_art_num == 1: # 进行直接写入操作
article_name = input(‘请输入文件名:‘)
article_content = input(‘请输入文件内容:‘)
with open(article_name,encoding=‘utf-8‘,mode=‘w‘) as f3: # 直接写入用户输入的内容
f3.write(article_content)
elif write_art_num == 2: # 进行md文件写入操作
article_name = input(‘请输入md文件的路径:‘)
with open(article_name,encoding=‘utf-8‘,mode=‘r‘) as f4, open(article_name[:-2] + ‘text‘,encoding=‘utf-8‘,mode=‘w‘) as f5:
f5.write(f4.read()) # 读取并写入
else:
print(‘您输入有误,请重新输入‘)
elif write_art_num.upper() == ‘B‘: # 返回上一页面
break
elif write_art_num.upper() == ‘Q‘: # 直接退出程序
return
return True
@common.auth
def comment():
‘‘‘
评论页面
@return:
‘‘‘
print(f‘欢迎{login_status_dict["username"]}进入评论页面‘)
if back_quit():
return True
else:
return
@common.auth
def dariy():
‘‘‘
日记页面
@return:
‘‘‘
print(f‘欢迎{login_status_dict["username"]}进入日记页面‘)
if back_quit():
return True
else:
return
@common.auth
def collect():
‘‘‘
收藏页面
@return:
‘‘‘
print(f‘欢迎{login_status_dict["username"]}进入收藏页面‘)
if back_quit():
return True
else:
return
@common.auth
def cancel_login():
‘‘‘
注销登录
@return:
‘‘‘
login_status_dict[‘username‘] = None # 把登录状态字典的登录者姓名改为None
login_status_dict[‘status‘] = False # 把登录状态改为False
print(‘您已注销‘)
if back_quit():
return True
else:
return
def back_quit():
‘‘‘
返回或直接退出
@return:
‘‘‘
while 1:
s_quit = input(‘输入B或b返回上一个页面,输入Q或q直接退出:‘).strip()
if s_quit.upper() == ‘B‘:
break
elif s_quit.upper() == ‘Q‘:
return
else:
print(‘您输入有误请重新输入‘)
return True
def run():
‘‘‘
主函数
@return:
‘‘‘
while 1:
table_print() # 打印目录
open_num = input(‘请输入您要进行的操作的序号:‘).strip() # 选择进行的操作
if open_num.isdecimal(): # 判断用户输入的序号是否符合规定
open_num = int(open_num) # 将序号变为int 类型
if open_num == 1:
login() # 执行登录操作
elif open_num == 2:
registration() # 执行注册操作
elif open_num == 3:
if article(): # 进入文章页面
continue
else:
return
elif open_num == 4:
if comment(): # 进入评论页面
continue
else:
return
elif open_num == 5:
if dariy(): # 进入日记页面
continue
else:
return
elif open_num == 6:
if collect(): # 进入收藏页面
continue
else:
return
elif open_num == 7:
if cancel_login(): # 进入注销账号页面
continue
else:
return
elif open_num == 8:
return
else:
print(‘您输入有误,请重新输入。‘)
else:
print(‘您输入有误,请重新输入。‘)
from core import src
def auth(f):
‘‘‘
判断是否有用户已经登录的装饰器
@param f: 修饰的函数名
@return: inner
‘‘‘
def inner(*args,**kwargs):
if src.login_status_dict[‘status‘]: # 如果已有用户登录,则直接运行被修饰函数
ret = f(*args,**kwargs)
return ret
else:
if src.login(): # 如果没有用户登录,则进行登录操作。
ret = f(*args,**kwargs)
return ret
return inner
标签:mode comm 成功 col with open 思路 lang quit strip
原文地址:https://www.cnblogs.com/szheng/p/13269244.html