def sendMail(emailAddress): """ 发送邮箱验证码 :param emailAddress: :return: """ # 处理发邮件的逻辑 返回发送状态 # 生成两个随机数,一个作为ID一个作为Code 加上时间戳 10min 就是10*60=600 sec # 这里可能需要编写一个经常运行的程序来保证验证码表在凌晨两点进行清空 curlTime = time.time() id = random.randint(100000, 999999) code = random.randint(100000, 999999) # 需要存入数据库并在验证方法中进行验证 try: passcet.models.passcet_emailcode.objects.create(id=id, code=code, time=curlTime) send_mail('PassCET-验证邮件', '您的验证码是[' + str(code) + '],有效期10分钟。如非本人操作,请忽略。', '*****@*****.**', [emailAddress], fail_silently=False) takelog(__file__, SF.PASSCET_103_SEND_EMAIL_MESSAGE_OK + str(id) + '"}') return HttpResponse(SF.PASSCET_103_SEND_EMAIL_MESSAGE_OK + str(id) + '"}') except: traceback.print_exc() # console输出错误信息 takelog(__file__, SF.PASSCET_204_EMAIL_SEND_FAILED) return HttpResponse(SF.PASSCET_204_EMAIL_SEND_FAILED)
def viaEmail(email, leavel, registerTime, name, md5): """ 通过邮箱记录信息 :param email: :param leavel: :param registerTime: :param name: :param md5: :return: """ if len(passcet.models.passcet_user.objects.filter( email__exact=email)) == 0: # 判断库里是不是已经有了相同的信息 passcet.models.passcet_user.objects.create(email=email, leavel=leavel, registertime=registerTime, name=name, img_md5=md5) takelog( __file__, SF.PASSCET_106_REGISTER_SUCCESS + getuserinfo.getviaemail(email)) resjson = getuserinfo.getviaemail(email) resjson = json.loads(resjson) print(type(resjson[0])) resjson[0].update({"code": "106", "status": "成功注册"}) # 添加 newjson = json.dumps(resjson[0], ensure_ascii=False) return HttpResponse(newjson) else: takelog(__file__, SF.PASSCET_206_DUPLICATE_USER) return HttpResponse(SF.PASSCET_206_DUPLICATE_USER)
def checkInfo(userInfo, cimei): if str(userInfo[0].lastimei ) == cimei and time.time() - userInfo[0].logintime > 15 * 24 * 60: takelog(__file__, SF.PASSCET_107_USERINFO_CHECK_SUCCESS) return HttpResponse(SF.PASSCET_107_USERINFO_CHECK_SUCCESS) else: takelog(__file__, SF.PASSCET_107_USERINFO_CHECK_SUCCESS) return HttpResponse(SF.PASSCET_203_NEED_LOGIN)
def imagetopaper(request): """ 通过识别图片来对数据库进行模糊查询以获取题目和相应释义 :param request: :return: """ token = request.POST.get('token') image = request.POST.get('image') # BASE64 cetype = request.POST.get('cetype') if token is not None and token == SF.PASSCET_TOKEN: if image is not None and cetype is not None: sendData = {'image': image} headers = {'Content-Type': 'application/x-www-form-urlencoded'} sendData = urllib.parse.urlencode(sendData).encode('utf-8') res = requests.post( 'https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic/?access_token=24.76322b8bb87c553728bffbf0baa19c8e.2592000.1577497316.282335-17173201', data=sendData, headers=headers) LoJson = json.loads(res.text) count = LoJson.get("words_result_num") # print(LoJson.get("words_result")[0~count]) result_list = [] modelss = [ 'in', 'on', 'with', 'by', 'for', 'at', 'about', 'under', 'of', 'a', 'an', '-', 'Directions', 'For', 'this', 'that', 'part', 'you' ] # 这里可继续优化以提高准确性 comp = re.compile('[^A-Z^a-z^0-9^]') # result_list.append(LoJson.get("words_result")[i].get('words')) # 从result中取出关键词,过滤方法:过滤长度小于5的单词和常见的英语介词(in,on,with,by,for,at,about,under,of)和标点符号 for i in range(count): # 取出百度的结果集 resultSet = LoJson.get("words_result")[i].get( 'words') # 获取到百度返回的一段话 resultSet = comp.sub(' ', resultSet) resultSet = resultSet.split() for i in resultSet: if i not in modelss and len(i) > 5: result_list.append(i) print(result_list) print(cetype) for i in range(len(result_list)): # 遍历 databaseQ = models.passcet_paper.objects.filter( cetype=cetype, problem__icontains=result_list[i]) if len(databaseQ) == 1: result = list(databaseQ.values()) return HttpResponse(json.dumps(result)) else: return HttpResponse('NO RESULT IN DATABASE!!') # QSet = models.passcet_paper.objects.filter(cetype=cetype, problem__icontains=result_list[2]) # print(json.dumps(list(QSet.values()))) else: print("TOKEN ERROR") takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: print("TOKEN?") takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR)
def getword(request): token = request.POST.get('token') QueryWord = request.POST.get('word') if token != SF.PASSCET_TOKEN or token == None: takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR) elif QueryWord == None: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: return HttpResponse(mainMethod(QueryWord))
def processRankList(userid,learningtime): try: print(userid+'***'+learningtime) temp = models.passcet_ranklist.objects.filter(userid=userid) print("okokok") totaltimet = list(temp.values())[0]['totaltime'] print(int(totaltimet)+int(learningtime)) temp.totaltime = int(totaltimet)+int(learningtime) temp.save() except: takelog(__file__,SF.PASSCET_213_DB_ERROR) return HttpResponse(SF.PASSCET_213_DB_ERROR)
def checkcode(request): token = request.GET.get('token') phoneNumber = request.GET.get('phone') id = request.GET.get('id') code = request.GET.get('code') if token == SF.PASSCET_TOKEN and code != None: if (phoneNumber != None): return verifiySmsCode.verifiySmsCode(phoneNumber, code) elif (id != None): return verifiyMailCode.verifiyMailCode(id, code) else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR)
def loginstatuscheck(request): token = request.POST.get('token') id = request.POST.get('id') # ctime = request.POST.get('time') #(UNIX时间戳)从安卓本地的存储中返回上一次验证登录的时间如果没有的话就重新登录吧。。 cimei = request.POST.get('imei') print(token, id, cimei) if token == SF.PASSCET_TOKEN and id != None and cimei != None: userInfo = models.passcet_user.objects.filter(id=id) return checkInfo(userInfo, cimei) elif token != SF.PASSCET_TOKEN: takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR) elif id == None or cimei == None: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR)
def getbriefword(request): """ 调用此接口来获得单词的音标,读音和相关释义。 此接口是getword的简化版本 此部分接口获取到的数据暂时不在数据库中进行缓存 :param request: :return: """ token = request.POST.get('token') word = request.POST.get('word') if token is not None and token == SF.PASSCET_TOKEN: if word is not None: testString = '' responseDirc = {} resource_json = requests.get( 'http://www.iciba.com/index.php?a=getWordMean&c=search&list=1%2C2%2C3%2C4%2C5%2C8%2C9%2C10%2C12%2C13%2C14%2C15%2C18%2C21%2C22%2C24%2C3003%2C3004%2C3005&word=' + word) json_res = json.loads(resource_json.text) # 转换为dictionary try: # 提前测试返回的json是否正常 word = {'word_name': json_res['baesInfo']['word_name']} responseDirc.update(word) ph_en = {'ph_en': json_res['baesInfo']['symbols'][0]['ph_en']} responseDirc.update(ph_en) ph_am = {'ph_an': json_res['baesInfo']['symbols'][0]['ph_am']} responseDirc.update(ph_am) ph_en_mp3 = { 'ph_en_mp3': json_res['baesInfo']['symbols'][0]['ph_en_mp3'] } responseDirc.update(ph_en_mp3) ph_am_mp3 = { 'ph_am_mp3': json_res['baesInfo']['symbols'][0]['ph_am_mp3'] } responseDirc.update(ph_am_mp3) indexNum = 0 for i in json_res['baesInfo']['symbols'][0]['parts']: print(type(i.get('means'))) temp = {str(indexNum): i} responseDirc.update(temp) indexNum += 1 # 提供K值的填充 num = {'num': indexNum} responseDirc.update(num) takelog(__file__, json.dumps(responseDirc)) return HttpResponse(json.dumps(responseDirc)) except: traceback.print_exc() takelog(__file__, SF.PASSCET_211_WORD_ERROR) return SF.PASSCET_211_WORD_ERROR else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR)
def addaccount(request): name = request.POST.get('name') token = request.POST.get('token') phone = request.POST.get('phone') email = request.POST.get('email') image = request.FILES.get('image') leavel = request.POST.get('leavel') if leavel == None: leavel = 0 if token == SF.PASSCET_TOKEN and ( phone != None or email != None) and name != None and image != None: rtime = time.time() # Unix时间戳 print(leavel) md5 = storagePic(request) if (phone != None): return viaPhone(phone, leavel, rtime, name, md5) else: return viaEmail(email, leavel, rtime, name, md5) else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR)
def verifiySmsCode(phoneNumber, code): sendData = {'mobilePhoneNumber': phoneNumber} headers = { 'X-Bmob-Application-Id': 'x', 'X-Bmob-REST-API-Key': 'x', 'Content-Type': 'application/json', 'Cache-Control': 'no-cache' } res = requests.post('https://api2.bmob.cn/1/verifySmsCode/' + code, data=json.dumps(sendData), headers=headers) json_res = json.loads(res.text) # 解码为python对象 /dict if 'msg' in json_res: if (json_res['msg'] == 'ok'): # 返回成功的标志告诉前端执行其他操作 takelog(__file__, SF.PASSCET_104_CHECK_PHONE_MESSAGE_OK) return HttpResponse(SF.PASSCET_104_CHECK_PHONE_MESSAGE_OK) else: print(res.text) takelog(__file__, SF.PASSCET_207_PHONE_MESSAGE_ERROR) return HttpResponse(SF.PASSCET_207_PHONE_MESSAGE_ERROR)
def register(request): # 处理登录的请求 phone = request.GET.get('phone') email = request.GET.get('email') token = request.GET.get('token') if phone == None and email == None: takelog(__file__,SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) elif token == SF.PASSCET_TOKEN: # 对token进行验证 如果正确才执行逻辑 if phone == None: phone = 0 elif email == None: email = 0 username = passcet_user.objects.all() # 从数据库中拿到集合 for usernames in username: # 轮询没问题后再执行发送相关的逻辑 print(usernames.email) print(usernames.phone) if email == usernames.email or phone == str(usernames.phone): takelog(__file__,SF.PASSCET_206_DUPLICATE_USER) return HttpResponse(SF.PASSCET_206_DUPLICATE_USER) # 出现重复的手机号或密码时进行检测 if phone != 0: # 如果phone里传过来了参数就发送短信 return sendSms.sendSms(phone) if email != 0: # 如果email里传过来了参数就发送电子邮件 return sendMail.sendMail(email) else: takelog(__file__,SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR) # token错误
def sendSMS(phoneNumber): """ 发送短信验证码 :param phoneNumber: :return: """ url = 'https://api2.bmob.cn/1/requestSmsCode' # 处理发送短信的逻辑 返回发送状态 sendData = { 'mobilePhoneNumber': phoneNumber, 'template': 'new' } headers = { 'X-Bmob-Application-Id': 'x', 'X-Bmob-REST-API-Key': 'x', 'Content-Type': 'application/json', 'Cache-Control': 'no-cache' } res = requests.post('https://api2.bmob.cn/1/requestSmsCode', data=json.dumps(sendData), headers=headers) # return HttpResponse(res.text) print(res.text) takelog(__file__,SF.PASSCET_102_SEND_PHONE_MESSAGE_OK) return HttpResponse(SF.PASSCET_102_SEND_PHONE_MESSAGE_OK)
def pushfeedback(request): """ 用户反馈接口,获取到反馈信息后发送邮件给管理员 当用户同时输入邮箱地址和电话时,会优先选择邮箱 :param request: :return: """ token = request.POST.get('token') mail = request.POST.get('mail') phone = request.POST.get('phone') content = request.POST.get('content') if token is not None and token == SF.PASSCET_TOKEN: if mail is not None or phone is not None and content is not None: # 开始执行逻辑 if mail is not None: return sendFeedInfo.sendFeedBackViaMail(mail, content) else: return sendFeedInfo.sendFeedBackViaPhone(phone, content) else: takeLog.takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takeLog.takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR)
def viaPhone(phone, leavel, registerTime, name, md5): """ 通过电话号码记录信息 :param phone: :param leavel: :param registerTime: :param name: :param md5: :return: """ if len(passcet.models.passcet_user.objects.filter( phone__exact=phone)) == 0: # 判断库里是不是已经有了相同的信息 passcet.models.passcet_user.objects.create(phone=phone, leavel=leavel, registertime=registerTime, name=name, img_md5=md5) takelog( __file__, SF.PASSCET_106_REGISTER_SUCCESS + getuserinfo.getviaphone(phone)) return HttpResponse(getuserinfo.getviaphone(phone)) else: takelog(__file__, SF.PASSCET_206_DUPLICATE_USER) return HttpResponse(SF.PASSCET_206_DUPLICATE_USER)
def delwordlist(request): token = request.POST.get('token') user_id = request.POST.get('userid') word = request.POST.get('word') if token != SF.PASSCET_TOKEN or token == None: takeLog.takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR) elif user_id == None or word == None: takeLog.takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: if models.passcet_glossary.objects.filter(user_id=user_id, word=word).count(): models.passcet_glossary.objects.filter(user_id=user_id, word=word).delete() takeLog.takelog(__file__, SF.PASSCET_111_DEL_GLOSSARY_SUCCESS) return HttpResponse(SF.PASSCET_111_DEL_GLOSSARY_SUCCESS) else: takeLog.takelog(__file__, SF.PASSCET_215_GLOSSARY_NO_DATA) return HttpResponse(SF.PASSCET_215_GLOSSARY_NO_DATA)
def pushlearningtime(request): token = request.POST.get('token') userid = request.POST.get('userid') learningtime = request.POST.get('learningtime') datetime = request.POST.get('datetime') if token != None and token == SF.PASSCET_TOKEN: if userid != None and learningtime != None and datetime != None: try: models.passcet_time.objects.create(userid=userid,learningtime=learningtime,datetime=datetime) processRankList(userid,learningtime) takelog(__file__,SF.PASSCET_101_OK) return HttpResponse(SF.PASSCET_101_OK) except: takelog(__file__,SF.PASSCET_213_DB_ERROR) return HttpResponse(SF.PASSCET_213_DB_ERROR) else: takelog(__file__,SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takelog(__file__,SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR)
def getwordlist(request): token = request.POST.get('token') userid = request.POST.get('userid') if token != SF.PASSCET_TOKEN or token == None: takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR) elif userid == None: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: QuerySett = models.passcet_glossary.objects.filter( user_id=userid) #QuerySet takelog(__file__, SF.PASSCET_101_OK) return HttpResponse(json.dumps(list(QuerySett.values())))
def getlearningtime(request): token = request.POST.get('token') userid = request.POST.get('userid') if token != None and token == SF.PASSCET_TOKEN: if userid != None: queryset = models.passcet_time.objects.filter( userid=userid) # QuerySet takelog(__file__, json.dumps(list(queryset.values()))) return HttpResponse(json.dumps(list(queryset.values()))) else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR)
def getusericon(request): # Author: NsuMicClub:Liguodong """ 通过POST获取用户的id号并返回一张图片 """ if request.POST.get('token') != None and request.POST.get( 'token') == SF.PASSCET_TOKEN: id = request.POST.get('id') imageid = models.passcet_user.objects.filter(id=id) #此处即判断用户ID是否存在 if len(imageid) != 0: #此处即判断用户ID是否存在 imagedata = open('static/img/' + imageid[0].img_md5 + '.jpeg', 'rb').read() takelog(__file__, SF.PASSCET_101_OK) return HttpResponse(imagedata, content_type='image/jpeg') else: takelog(__file__, SF.PASSCET_210_NO_IMG_DATA) return HttpResponse(SF.PASSCET_210_NO_IMG_DATA) else: takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR)
def sendFeedBackViaMail(mailaddress, feedbackcontent): try: print(mailaddress, feedbackcontent) passcet.models.passcet_feedback.objects.create( email=mailaddress, feedback=feedbackcontent) except: traceback.print_exc() takelog(__file__, SF.PASSCET_213_DB_ERROR) return HttpResponse(SF.PASSCET_213_DB_ERROR) try: send_mail( 'PassCET-用户反馈信息', '邮箱地址为' + mailaddress + '的用户提交了内容为[' + feedbackcontent + ']的反馈,请及时处理并向用户反馈!', '*****@*****.**', [SF.PASSCET_ADMIN_EMAIL_LIGUODONG, SF.PASSCET_ADMIN_EMAIL_LIANJIE], fail_silently=False) # Fail silently 错误是否要提示? takelog(__file__, SF.PASSCET_112_FEED_BACK_EMAIL_SEND_SUCCESS) return HttpResponse(SF.PASSCET_112_FEED_BACK_EMAIL_SEND_SUCCESS) except: traceback.print_exc() # console输出错误信息 takelog(__file__, SF.PASSCET_216_FEED_BACK_EAMIL_SEND_ERROR) return HttpResponse(SF.PASSCET_216_FEED_BACK_EAMIL_SEND_ERROR)
def bindaccount(request): token = request.POST.get('token') type = request.POST.get('type') # 0:已经绑定邮箱,需要绑定手机号;1:已经绑定手机需要绑定邮箱 phone = request.POST.get('phone') email = request.POST.get('email') option = request.POST.get('option') # 0:发送验证码 1:验证验证码 id = request.POST.get('id') code = request.POST.get('code') # 验证TOKEN if token != None and token == SF.PASSCET_TOKEN: if type != None and (phone != None or email != None ) and type != None and option != None: if type == 0: # 0:已经绑定邮箱,需要绑定手机号 if len(models.passcet_user.objects.filter( email=email)) == 1: # 查库,有这个账号 if option == 0: # send code return register.sendSMS(phone) elif option == 1: # check code codestatus_json = checkcode.checkPhone( phone, code) # 检查短信的验证码是否正确 codestatus = json.loads(codestatus_json.text) if 'code' in codestatus: if (codestatus['code'] == '104'): models.passcet_user.objects.filter( email=email).update(phone=phone) takelog(__file__, SF.PASSCET_108_BIND_PHONE_SUCCESS) return HttpResponse( SF.PASSCET_108_BIND_PHONE_SUCCESS) else: return HttpResponse(codestatus_json) else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takelog(__file__, SF.PASSCET_205_USER_DOES_NOT_EXIST) return HttpResponse(SF.PASSCET_205_USER_DOES_NOT_EXIST) elif type == 1: if len(models.passcet_user.objects.filter(phone=phone)) == 1: if option == 0: return register.sendMail(email) elif option == 1: codestatus_json = checkcode.chenkemail(id, code) codestatus = json.loads(codestatus_json.text) if code in codestatus: if codestatus['code'] == '105': models.passcet_user.objects.filter( phone=phone).update(email=email) takelog(__file__, SF.PASSCET_109_BIND_EMAIL_SUCCESS) return HttpResponse( SF.PASSCET_109_BIND_EMAIL_SUCCESS) else: return HttpResponse(codestatus_json) else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR)
def login(request): token = request.POST.get('token') type = request.POST.get( 'type') # type 0:验证存在并发送验证码 type1:验证验证码并返回结果,同时把用户的ID等信息返回给客户端。 phone = request.POST.get('phone') email = request.POST.get('email') id = request.POST.get('id') code = request.POST.get('code') if token == SF.PASSCET_TOKEN and token is not None: if type is not None: if type == '0' and (phone is not None or email is not None): # 用户是否存在 if phone is None: # 处理邮件验证码 if len(models.passcet_user.objects.filter( email=email)) == 1: takelog(__file__, SF.PASSCET_101_OK) return sendMail.sendMail(email) else: takelog(__file__, SF.PASSCET_205_USER_DOES_NOT_EXIST) return HttpResponse(SF.PASSCET_205_USER_DOES_NOT_EXIST) else: if len(models.passcet_user.objects.filter( phone=phone)) == 1: takelog(__file__, SF.PASSCET_101_OK) return sendSms.sendSMS(phone) else: takelog(__file__, SF.PASSCET_205_USER_DOES_NOT_EXIST) return HttpResponse(SF.PASSCET_205_USER_DOES_NOT_EXIST) elif type == '1': if phone is not None and code is not None: takelog(__file__, SF.PASSCET_101_OK) return verifiySmsCode.verifiySmsCode(phone, code) elif id is not None and code is not None: takelog(__file__, SF.PASSCET_101_OK) return verifiyMailCode.verifiyMailCode(id, code) else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) # 缺少参数 else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR)
def addwordlist(request): token = request.POST.get('token') userid = request.POST.get('userid') word = request.POST.get('word') #description 通过getword从网络或数据库获取 if token == None or token != SF.PASSCET_TOKEN: takelog(__file__, SF.PASSCET_201_TOKEN_ERROR) return HttpResponse(SF.PASSCET_201_TOKEN_ERROR) elif userid == None or word == None: takelog(__file__, SF.PASSCET_202_PARAMETER_ERROR) return HttpResponse(SF.PASSCET_202_PARAMETER_ERROR) else: if models.passcet_user.objects.filter(id=userid).count(): if models.passcet_glossary.objects.filter(user_id=userid, word=word).count(): takelog(__file__, SF.PASSCET_214_WORD_EUPLICATE) return HttpResponse(SF.PASSCET_214_WORD_EUPLICATE) else: try: models.passcet_glossary.objects.create( user_id=userid, word=word, description=json.loads(str(getword.mainMethod(word))) [0]['description']) #从getword接口中获取 后期优化从getword.py分离 takelog(__file__, SF.PASSCET_110_ADD_GLOSSARY_SUCCESS) return HttpResponse(SF.PASSCET_110_ADD_GLOSSARY_SUCCESS) except: takelog(__file__, SF.PASSCET_213_DB_ERROR) return HttpResponse(SF.PASSCET_213_DB_ERROR) else: takelog(__file__, SF.PASSCET_205_USER_DOES_NOT_EXIST) return HttpResponse(SF.PASSCET_205_USER_DOES_NOT_EXIST)
def mainMethod(QueryWord): try: testString = '' resource_json = requests.get( 'http://www.iciba.com/index.php?a=getWordMean&c=search&list=1%2C2%2C3%2C4%2C5%2C8%2C9%2C10%2C12%2C13%2C14%2C15%2C18%2C21%2C22%2C24%2C3003%2C3004%2C3005&word=' + QueryWord) json_res = json.loads(resource_json.text) # 转换为dictionary print(json_res) try: # 提前测试返回的json是否正常 print(json_res['baesInfo']['word_name']) print(json_res['baesInfo']['symbols'][0]['ph_en']) print(json_res['baesInfo']['symbols'][0]['ph_am']) print(json_res['baesInfo']['symbols'][0]['ph_en_mp3']) print(json_res['baesInfo']['symbols'][0]['ph_am_mp3']) # print(json_res['baesInfo']['symbols'][0]['parts'][0]) # 遍历List demoString = json.dumps(json_res['baesInfo']['symbols'][0]) print('测试字符串' + demoString) for i in json_res['baesInfo']['symbols'][0]['parts']: testString = testString + json.dumps(i) + ',' # print(i) 释义 print(testString) print(json.dumps(json_res['sentence'])) # 例句 except: traceback.print_exc() takelog(__file__, SF.PASSCET_211_WORD_ERROR) return SF.PASSCET_211_WORD_ERROR # 开始存储数据 if models.passcet_word.objects.filter(word=str(QueryWord)).count(): models.passcet_word.objects.filter(word=str(QueryWord)).delete() # if 'cetFour' and 'cetSix' in json_res: if json_res.get('cetFour') and json_res.get('cetSix'): print('46都存在') models.passcet_word.objects.create( word=json_res['baesInfo']['word_name'], ph_en=json_res['baesInfo']['symbols'][0]['ph_en'], ph_am=json_res['baesInfo']['symbols'][0]['ph_am'], ph_en_mp3=json_res['baesInfo']['symbols'][0]['ph_en_mp3'], ph_am_mp3=json_res['baesInfo']['symbols'][0]['ph_am_mp3'], description=json.dumps( json_res['baesInfo']['symbols'][0]['parts']), sentence=json.dumps(json_res['sentence']), cet4=json.dumps(json_res['cetFour']['count']), cet6=json.dumps(json_res['cetSix']['count'])) elif json_res.get('cetFour'): print(json_res['cetFour']['count']) models.passcet_word.objects.create( word=json_res['baesInfo']['word_name'], ph_en=json_res['baesInfo']['symbols'][0]['ph_en'], ph_am=json_res['baesInfo']['symbols'][0]['ph_am'], ph_en_mp3=json_res['baesInfo']['symbols'][0]['ph_en_mp3'], ph_am_mp3=json_res['baesInfo']['symbols'][0]['ph_am_mp3'], description=json.dumps( json_res['baesInfo']['symbols'][0]['parts']), sentence=json.dumps(json_res['sentence']), cet4=json.dumps(json_res['cetFour']['count'])) elif json_res.get('cetSix'): print(json_res['cetSix']['count']) models.passcet_word.objects.create( word=json_res['baesInfo']['word_name'], ph_en=json_res['baesInfo']['symbols'][0]['ph_en'], ph_am=json_res['baesInfo']['symbols'][0]['ph_am'], ph_en_mp3=json_res['baesInfo']['symbols'][0]['ph_en_mp3'], ph_am_mp3=json_res['baesInfo']['symbols'][0]['ph_am_mp3'], description=json.dumps( json_res['baesInfo']['symbols'][0]['parts']), sentence=json.dumps(json_res['sentence']), cet4=json.dumps(json_res['cetSix']['count'])) else: print('46都不存在') models.passcet_word.objects.create( word=json_res['baesInfo']['word_name'], ph_en=json_res['baesInfo']['symbols'][0]['ph_en'], ph_am=json_res['baesInfo']['symbols'][0]['ph_am'], ph_en_mp3=json_res['baesInfo']['symbols'][0]['ph_en_mp3'], ph_am_mp3=json_res['baesInfo']['symbols'][0]['ph_am_mp3'], description=json.dumps( json_res['baesInfo']['symbols'][0]['parts']), sentence=json.dumps(json_res['sentence'])) # 数据存储结束 # 开始检索数据库 QuerySett = models.passcet_word.objects.filter(word=str(QueryWord)) print(QuerySett) takelog(__file__, SF.PASSCET_101_OK) return json.dumps(list(QuerySett.values())) except: # 读取数据库中的缓存信息 traceback.print_exc() try: QuerySett = models.passcet_word.objects.filter(word=str(QueryWord)) print(QuerySett) takelog(__file__, SF.PASSCET_101_OK) return json.dumps(list(QuerySett.values())) except: takelog(__file__, SF.PASSCET_212_SEARCH_ERROR) return SF.PASSCET_212_SEARCH_ERROR