# coding=utf-8 from crawler import connection, getGrade, getSchedule import json from hashlib import md5 from urllib.parse import urlencode, unquote_plus from db import addRank, getRank # 主函数 # 处理登录操作 data:{cid,pwd,sign} # 这里三个接口公用一个session所以合并成一个接口,一个session走到底,一次性返回所有数据 def manageLogin(request): # json化,应该能当dict用 data_cache = json.loads(request.form['data']) # MD5校验 checked = checkData(data_cache) data_cache.pop('sign') if checked: # 创建会话 res = connect(data_cache) if res['errcode'] == 200: # 登录成功并进行查询 grade = getGrade(res['ip'], res['s']) schedule = getSchedule(res['ip'], res['s']) return {'errcode': '200', 'errmsg': 'ok', 'student_name':res['student_name'], 'student_id':res['student_id'], 'grade': grade, 'schedule': schedule} else: return res else: return {'errcode': 100, 'errmsg':'数据校验失败'} # 处理更新课表游戏排名信息 def manageScheduleUpload(request): # json化,应该能当dict用 data_cache = json.loads(request.form['data']) # MD5校验 checked = checkData(data_cache) data_cache.pop('sign') if checked: add_res = addRank( data_cache['nick'], data_cache['count'], data_cache['time']) return add_res else: return {'errcode': 400, 'errmsg': '数据校验失败'} # 处理获取课表游戏排名信息 def manageScheduleGet(request): # json化,应该能当dict用 data_cache = json.loads(request.form['data']) # MD5校验 checked = checkData(data_cache) data_cache.pop('sign') if checked: # 获取排名表 get_res = getRank() return get_res else: return {'errcode': 400, 'errmsg': '数据校验失败'} # 工具函数 # MD5 校验 def checkData(data): d = data.copy() try: d.pop('sign') except KeyError: pass d = str(d) d = d.replace(' ', '') md = md5() md.update(d.encode('utf-8')) r = md.hexdigest().upper() return r == data['sign'] # 创建会话 def connect(data): cid = data['cid'] pwd = data['pwd'] # 进行登录 phone = '' if data.get('phone'): phone = data['phone'] try: # 这里教务没问题,账户没问题就是200,密码错了就是101 res = connection(cid,pwd,phone) return res except: # 这了就是教务挂了 return {'errcode': 102, 'errmsg':'教务挂了'}