import random import re from flask import current_app, jsonify, request, Blueprint import utils from app import redis_client, LogService from presenter import MobileCodePresenter from utils import create_response, StateCode key = current_app.config['SECRET_KEY'] mobile_bp = Blueprint('mobile_server', __name__) @mobile_bp.route('/mobile/get_verify_code', methods=['POST']) # 发送一次性密码(验证码) def getVerifyCode(): mobile_no = request.json.get('mobileNo') if not utils.checkMobile(mobile_no): return jsonify(create_response(StateCode.MOBILE_ERROR)), 400 sent_code = getVerificationCode(mobile_no) mobile_present = MobileCodePresenter(sent_code).as_dict() LogService.log() return jsonify(create_response(StateCode.SUCCESS, data=mobile_present)), 200 #检验手机号的格式 @mobile_bp.route('/mobile/check', methods=['POST']) def checkMobile(): #正则表达式,用户输入的必须是中国大陆的手机号码格式,例如11位,第一位必须是1等 pattern = r'^1[3-9]\d{9}$' #获取到客户输入的手机号 number = request.json.get('mobileNo') print(number) state = { #进行匹配,将匹配的结果保存在state字典中 "result": bool(re.match(pattern, number)) } LogService.log() #记录日志 #返回一个json格式的数据 return jsonify(create_response(StateCode.SUCCESS, data=state)), 200 def getVerificationCode(mobile_no): verification_code = generateRandomNumber() # 生成验证码 print(verification_code) if redis_client.set(mobile_no, verification_code, 300): return verification_code else: print(f"{redis_client.client}") # 生成6位随机数字 def generateRandomNumber(length=6): # 确保生成的数字至少有6位,即使前几位是0 number = random.randint(10 ** (length - 1), 10 ** length - 1) return number