You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
2.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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