ATM作业
1. 主入口是server.py
2. 主流程代码在main.py
2.1 写登陆入口验证函数
输入usr去数据库查找usr的个人信息A
把A提取出来,赋给函数里的一个临时变量,同时这个变量还包含一个布尔值元素---1把A提取出来是因为方便后续操作数据A 2设置一个布尔值是为了后续写装饰器判断状态
用
赋值A给变量的操作放在mian.py里做,因为放在函数里还需要返回,即函数里无必要 不要做赋值-返回的操作
对于查询信息尽量避免使用index,方便以后对信息做修改
2.2 对usr查询信息用if false:判断是否为空,空代表没查询到,记录错误次数,后续做锁定用户的功能
day 10.05
由于把用户信息作为字典都放在一个文件里,遇到了一个问题:把修改后用户信息写回原文件很麻烦。
中间过程省略。。。
最后先把源文件读出来,把修改后的用户信息用一个列表A存起来,再把列表A写回源文件,也就是把内存double性能使用了。由于写列表A回去不会分行,因此手动加\n进行分行。(这里会有1个bug,由于\n的影响,取现操作只能进行2次,后续会报错)
这也使我知道了为什么要把每个用户信息单独用一个文件保存起来的原因---1方便修改2节省内存,修改时候只需要double一条用户信息的内存
import sys,os tmp_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(tmp_dir) print('DB_PATH',DB_PATH) from conf.settings import DB_PATH def save_file(usr_obj): '''usr_obj = {'status': False, 'data': {'usr': 'jack', 'pwd': 'abc', 'money': 1000, 'uid': 123, 'credit': 15000, 'expire_date': '2022-01-01', 'enroll_date': '2017-10-02', 'lock_status': 0}} ''' tmp_file = [] # 临时列表,保存原来用户信息 with open(DB_PATH, 'r') as f: # 把源文件内容读出来并放在列表tmp_file里 for line in f.readlines(): if eval(line)['usr'] == usr_obj['data']['usr']: line = str(usr_obj['data']) tmp_file.append(line) with open(DB_PATH,'w') as f: # 把tmp_file 写回源文件 for line in tmp_file: f.write(line+'\n') # 手动加\n进行分组
day 10.06
函数装饰器是验证关键字模块,如‘QQ’,不是验证状态
# inner里可以再放一些参数,def inner(*args,**kwargs):#再定义一层函数,*args,**kwargs的作用是什么?函数外部的参数怎么通过inner给传进来?
完成用户认证装饰器
# 执行main.entrance, 函数外的usr_obj也导入进去了,不同模块执行方法过程是怎样的?
打印中文log---在filehandler里设置编码模式为UTF-8
fh = logging.FileHandler('D:/ATM/atm/log/access_log/access_log.log', encoding='UTF-8')
完成购物商城,商城日志