from flask import Blueprint, request, jsonify from flask_jwt_extended import create_access_token, jwt_required, get_jwt_identity from app import redis_client, LogService from app.models.passenger_lib import Passenger, isAvailable from presenter import PassengerPresenter from utils import StateCode, create_response, checkMobile, checkIdCard, checkBankCard register_bp = Blueprint('register', __name__) #注册模块 @register_bp.route('/register', methods=['POST']) def register(): #获取到前端用户注册的数据 data = request.json print(data) account = data.get('account') #用户名 password = data.get('password') #密码 mobile_no = data.get('mobileNo') #手机号 mobile_code = data.get('mobileCode') #验证码 id_card_no = data.get('idCardNo') #身份证号 bank_card_no = data.get('bankCard') #银行卡号 #判断账号和密码是否为空 if not account or not password: return jsonify(create_response(StateCode.PARAMS_ERROR)), 400 #判断手机号是否可行 if not checkMobile(mobile_no): return jsonify(create_response(StateCode.MOBILE_ERROR)), 400 #判断验证码是否正确(俩个参数,手机号和验证码) if not verifyCode(mobile_no, mobile_code): return jsonify(create_response(StateCode.MOBILE_CODE_ERROR)), 400 #判断身份证号码是否可行 if not checkIdCard(id_card_no): return jsonify(create_response(StateCode.ID_CARD_ERROR)), 400 # 判断账号是否被注册过 if isAvailable(account): return jsonify(create_response(StateCode.USER_ALREADY_EXISTS)), 400 #判断银行卡号是否可行 if not checkBankCard(bank_card_no): return jsonify(create_response(StateCode.BANK_CARD_ERROR)), 400 new_passenger = Passenger.create(data=data) # 为新创建的乘客生成访问令牌 access_token = create_access_token(identity=new_passenger.id) user_presenter = PassengerPresenter(new_passenger, {"token": access_token}).as_dict() LogService.log() return jsonify(create_response(StateCode.SUCCESS, data=user_presenter)), 200 @register_bp.route('/auth', methods=['GET']) @jwt_required() def auth(): current_user = get_jwt_identity() user = Passenger.query.get(current_user) if not user: return jsonify(create_response(StateCode.USER_NOT_FOUND)), 400 user_presenter = PassengerPresenter(user, {}).as_dict() LogService.log() return jsonify(create_response(code=StateCode.SUCCESS, data=user_presenter)), 200 #校验验证码 def verifyCode(mobile_no, code): #获取到随机产生的验证码,再判断用户输入的验证码是否正确 #这里的用到了redis,Redis是一种开源的、基于内存的键值存储,通常用于缓存、分布式存储 和 高效数据处理, #所以通过get方法获取到对应的值即验证码 stored_code = redis_client.get(mobile_no) return stored_code == code