Example #1
0
def register():
    """用户注册接口:
    1.获取参数phone_num 手机号,phonecode 	短信验证码,password 	密码
    2.校验数据
    3.从Redis获取短信验证码,和传来的数据校验,如果正确
    4.新增user对象,
    5.跳转首页,保持登录状态
    :return 返回注册信息{ 're_code':'0','msg':'注册成功'}
    """
    # 1.获取参数phone_num 手机号,phonecode 	短信验证码,password 	密码
    json_dict = request.json
    phone_num = json_dict.get('phone_num')
    phonecode_client = json_dict.get('phonecode')
    password = json_dict.get('password')
    # 2.校验数据
    if not all([phone_num, phonecode_client, password]):
        return jsonify(re_code=RET.PARAMERR, msg='参数不完整')

    # 校验手机号是否正确
    if not re.match(
            r'^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$',
            phone_num):
        return jsonify(re_code=RET.PARAMERR, msg='手机号不正确')

    # 3.从Redis获取短信验证码,和传来的数据校验,如果正确
    try:
        phonecode_server = redis_conn.get('PhoneCode:' + phone_num)
    except Exception as e:
        current_app.logger.debug(e)
        return jsonify(re_code=RET.DBERR, msg='查询短信验证码失败')
    if phonecode_server.decode() != phonecode_client:
        return jsonify(re_code=RET.PARAMERR, msg='短信验证码错误')

    # 4.新增user对象,
    user = User()
    user.name = phone_num
    user.phone_num = phone_num
    user.password_hash = password
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.debug(e)
        db.session.rollback()
        return jsonify(re_code=RET.DBERR, msg='注册失败')
    # 5.跳转首页,保持登录状态
    session['user_id'] = user.id
    session['name'] = user.name
    session['phone_num'] = user.phone_num
    # 6.响应结果
    return jsonify(re_code=RET.OK, msg='注册成功')
Example #2
0
def register():
    """用户注册接口"""
    # 1.获取参数phone_num 手机号,phonecode 	短信验证码,password 	密码
    phone_num = request.json.get('phone_num')
    phonecode_client = request.json.get('phonecode')
    password = request.json.get('password')
    #2.校验数据
    if not all([phone_num, phonecode_client, password]):
        return jsonify(re_code=RET.PARAMERR, msg='参数不完整')

    # 校验手机号是否正确
    if not re.match(r'1[3456789]\d{9}$', phone_num):
        return jsonify(re_code=RET.PARAMERR, msg='手机号不正确')

    # 3.从Redis获取短信验证码,和传来的数据校验,如果正确
    try:
        phonecode_server = redis_conn.get('PhoneCode:' + phone_num)
    except Exception as e:
        current_app.logger.debug(e)
        return jsonify(re_code=RET.DBERR, msg='查询短信验证码失败')
    if phonecode_server != phonecode_client:
        return jsonify(re_code=RET.PARAMERR, msg='短信验证码错误')

    #4.新增user对象,
    user = User()
    user.name = phone_num
    user.phone_num = phone_num
    user.password_hash = password
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.debug(e)
        db.session.rollback()
        return jsonify(re_code=RET.DBERR, msg='注册失败')
    #5.跳转首页,保持登录状态
    session['user_id'] = user.id
    session['name'] = user.name
    session['phone_num'] = user.phone_num
    #6.响应结果
    return jsonify(re_code=RET.OK, msg='注册成功')
Example #3
0
def register():
    """
    用户注册
    :parameter:手机号、短信验证码、密码、确认密码
    :return:
    """
    req_dict = request.get_json()
    mobile = req_dict.get("mobile")
    sms_code = req_dict.get("sms_code")
    password = req_dict.get("password")
    password2 = req_dict.get("password2")

    # 判断参数是否完整
    if not all([mobile, sms_code, password, password2]):
        return jsonify(errno=RET.PARAMERR, errmsg="参数不完整")

    # 判断手机号格式
    if not re.match(r'1[34578]\d{9}', mobile):
        return jsonify(errno=RET.PARAMERR, errmsg="手机号格式错误")
    if password != password2:
        return jsonify(errno=RET.PARAMERR, errmsg="两次密码不一致")

    # 从redis中取出短信验证码
    try:
        real_sms_code = redis_store.get("sms_code_%s" % mobile)
        real_sms_code = real_sms_code.decode("utf-8")
    except Exception as E:
        current_app.logger.error(E)
        return jsonify(errno=RET.DBERR, errmsg="redis数据库异常")

    # 判断短信验证码是否过期
    if real_sms_code is None:
        return jsonify(errno=RET.NODATA, errmsg="短信验证码失效")

    # 比对短信验证码
    if real_sms_code != sms_code:
        return jsonify(errno=RET.DATAERR, errmsg="短信验证码错误")

    # 删除redis中短信验证码
    try:
        redis_store.delete("sms_code_%s" % mobile)
    except Exception as E:
        current_app.logger.error(E)

    # 判断用户手机号是否注册过(利用保存重复数据时,数据库会抛异常)
    user = User(name=mobile, phone_num=mobile)
    user.password_hash = password
    try:
        db.session.add(user)
        db.session.commit()
    except IntegrityError as e:
        # 表示手机号出现重复值,已注册过
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DATAEXIST, errmsg="手机号已存在")
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DATAERR, errmsg="mysql数据库异常")

    # 创建session,保存登录状态
    session["name"] = mobile
    session["mobile"] = mobile
    session["user_id"] = user.id

    return jsonify(errno=RET.OK, errmsg="注册成功!")
Example #4
0
def register():
	"""
	1. 获取参数
	2. 判断是否为空
	3. 获取redis保存的短信验证码
	4. 验证对比,并删除验证码
	5. 将用户数据保存到数据库,并缓存到Session
	6. 返回用户信息
	:return:
	"""

	# 1. 获取参数
	dict_data = request.json
	mobile = dict_data.get("mobile")
	sms_code = dict_data.get("phoneCode")
	password = dict_data.get("password")

	# 2. 判断是否为空
	if not all([mobile,sms_code,password]):
		return jsonify(errno=RET.PARAMERR,errmsg="参数不完整")

	if not re.match(r"1[35678]\d{9}",mobile):
		return jsonify(errno=RET.DATAERR,errmsg="手机号格式错误")


	# 3. 获取redis保存的短信验证码
	try:
		redis_sms_code = redis_store.get('SMSCode_'+mobile)
	except Exception as e:
		current_app.logger.error(e)
		return jsonify(errno=RET.DBERR, errmsg='短信验证码读取异常')

	if not redis_sms_code:
		return jsonify(errno=RET.DATAERR, errmsg='短信验证码已过期')

	# 4. 验证对比,并删除验证码
	# print sms_code
	# print type(sms_code)
	# print redis_sms_code
	if sms_code != redis_sms_code:
		return jsonify(errno=RET.DATAERR,errmsg="短信验证错误")

	# 5.删除短信验证码
	try:
		redis_store.delete('SMSCode_'+mobile)
	except Exception as e:
		# logging.error(e)
		current_app.logger.error(e)

	user = User()
	user.name = mobile  # 用户名默认是手机号
	user.mobile = mobile
	# TODO 手机号稍后处理, 不能以明文的形式存储
	# print user.password_hash
	user.password_hash = generate_password_hash(password)
	print user.password_hash

	# 7.保存到数据库中
	try:
		print "正在保存用户信息...."
		db.session.add(user)
		db.session.commit()
	except Exception as e:
		current_app.logger.error(e)
		db.session.rollback()
		return jsonify(errno=RET.DBERR, errmsg="用户保存异常")

	# 8.可以记录用户登录状态(通过session)
	session["user_id"] = user.id
	session["user_name"] = user.name
	session["mobile"] = user.mobile

	# 9.返回注册的结果给前端
	print "注册成功"
	return jsonify(errno=RET.OK,errmsg="注册成功")
Example #5
0
def register():
    """用户注册接口:
    1.获取参数phone_num 手机号,phonecode 	短信验证码,password 	密码
    2.校验数据
    3.从Redis获取短信验证码,和传来的数据校验,如果正确
    4.新增user对象,
    5.跳转首页,保持登录状态
    :return 返回注册信息{ 're_code':'0','msg':'注册成功'}
    """
    # 1.获取参数phone_num 手机号,phonecode 	短信验证码,password 	密码
    print('注册')
    json_dict = request.get_json()
    phone_num = json_dict.get('phone_num')
    sms_code = json_dict.get('phonecode')
    password = json_dict.get('password')
    password2 = json_dict.get('password2')

    #2.校验数据
    print(phone_num)
    print(sms_code)
    print(password2)
    print(password)
    if not all([phone_num, sms_code, password]):
        return jsonify(re_code=RET.PARAMERR, msg='参数不完整')
    print(1)
    # 校验手机号是否正确
    if not re.match(r'^0\d{2,3}\d{7,8}$|^1[358]\d{9}$|^147\d{8}$', phone_num):
        return jsonify(re_code=RET.PARAMERR, msg='手机号不正确')
    print(2)
    # 确认密码
    if password != password2:
        return jsonify(re_code=RET.PWDERR, msg='确认密码不一致')
    print(3)

    # 3.从Redis获取短信验证码,和传来的数据校验,如果正确
    try:
        real_sms_code = redis_conn.get('PhoneCode:' + phone_num)
    except Exception as e:
        current_app.logger.debug(e)
        return jsonify(re_code=RET.DBERR, msg='查询短信验证码失败')
    print(4)
    # 短信验证
    # str.encode('utf-8')
    # bytes.decode('utf-8')
    print(real_sms_code)
    real_sms_code = real_sms_code.decode('utf-8')
    print(real_sms_code)
    print(sms_code)
    if real_sms_code != sms_code:
        return jsonify(re_code=RET.PARAMERR, msg='短信验证码错误')
    print(5)
    #4.新增user对象,
    user = User()
    user.name = phone_num
    user.phone_num = phone_num
    # 加密密码
    user.password_hash = password
    # 提交
    try:
        db.session.add(user)
        db.session.commit()

    except IntegrityError as e:
        current_app.logger.errer(e)
        # 回滚
        db.session.rollback()
        return jsonify(re_code=RET.DBERR, msg='手机号已被注册')

    except Exception as e:
        current_app.logger.errer(e)
        db.session.rollback()
        return jsonify(re_code=RET.DBERR, msg='注册失败')
    print(6)
    #5.跳转首页,保持登录状态
    session["user_id"] = user.id
    session["name"] = user.name
    session["phone_num"] = user.phone_num
    #6.响应结果
    print('注册成功')
    return jsonify(re_code=RET.OK, msg='注册成功')