예제 #1
0
def register():
    """

    :return:
    """
    # request.json.get()  获取单个json数据
    # 获取整个json数据包
    json_data = request.get_json()
    if not json_data:
        return jsonify(errno=RET.PARAMERR, errmsg='参数错误')
    # 从json数据包中挨个提取参数
    mobile = json_data.get('mobile')
    sms_code = json_data.get('sms_code')
    password = json_data.get('password')
    if not all([mobile, sms_code, password]):
        return jsonify(errno=RET.PARAMERR, errmsg='缺少必传参数')
    # 校验手机号
    if not re.match(r'1[3-9]\d{9}$', mobile):
        return jsonify(errno=RET.PARAMERR, errmsg='手机格式错误')
    # 从redis中取出真实的短信验证码
    try:
        server_sms_code = redis_cli.get('SMSCode_' + mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='查询数据失败')
    # 判断查询结果
    if not server_sms_code:
        return jsonify(errno=RET.DATAERR, errmsg='数据失效')
    # 先比较  再删除
    if server_sms_code != str(sms_code):
        return jsonify(errno=RET.DATAERR, errmsg='短信验证码错误')
    try:
        redis_cli.delete('SMSCode_' + mobile)
    except Exception as e:
        current_app.logger.error(e)

    # 实例化模型类对象, 保存用户信息
    user = User()
    user.mobile = mobile
    user.name = mobile
    user.password = password
    try:
        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='用户注册失败')

    # 缓存用户信息,使用session对象,存到redis中
    session['user_id'] = user.id
    session['name'] = mobile
    session['mobile'] = mobile
    # 返回结果,
    # data表示用户数据,是注册业务完成后,返回注册结果相关的附属信息
    return jsonify(errno=RET.OK, errmsg='注册成功', data=user.to_dict())
예제 #2
0
파일: passport.py 프로젝트: shanesl/ihome
def user():
    # 获取参数
    phonecode = request.json.get("phonecode")
    mobile = request.json.get("mobile")
    password = request.json.get("password")
    # 校验参数
    # print(sms_code,mobile,password)
    if not all([phonecode, mobile, password]):
        return jsonify(errno=RET.PARAMERR, errmsg=error_map[RET.PARAMERR])
    # 手机号校验
    if not re.match(r"1[345678]\d{9}$", mobile):
        # print("手机校验失败")
        return jsonify(errno=RET.PARAMERR, errmsg=error_map[RET.PARAMERR])
    # 判断用户是否一存在
    try:
        user = User.query.filter(User.mobile == mobile).first()
    except BaseException as  e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg=error_map[RET.DBERR])

    if user:
        return jsonify(errno=RET.DATAEXIST, errmsg=error_map[RET.DATAEXIST])
    # 校验短信验证码,更具手机号取出短信验证码
    # print("手机校验通过了")
    try:
        real_phonecode = sr.get("sms_code_id" + mobile)
    except BaseException as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg=error_map[RET.DBERR])
    # 如获取到了验证码
    if real_phonecode != phonecode:
        # print("验证码错误")
        return jsonify(errno=RET.PARAMERR, errmsg=error_map[RET.PARAMERR])

    # 记录用户数据
    user = User()
    user.mobile = mobile
    user.name = mobile
    # user.password_hash=password   #  直接存储密码为明文密码  不安全

    # 使用计算属性封装密码
    user.password = password
    db.session.add(user)

    try:
        db.session.commit()
    except BaseException as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg=error_map[RET.DBERR])

    # 使用session 记录用户登录状态,记录主键就可以查询出其他的数据
    session["user_id"] = user.id

    # json 返回结果
    return jsonify(errno=RET.OK, errmsg=error_map[RET.OK])
예제 #3
0
def register():
    """
    1. 获取参数和判断是否有值
    2. 从redis中获取指定手机号对应的短信验证码的
    3. 校验验证码
    4. 初始化 user 模型,并设置数据并添加到数据库
    5. 保存当前用户的状态
    6. 返回注册的结果
    :return:
    """

    # 1. 获取参数和判断是否有值
    data_dict = request.json
    mobile = data_dict.get("mobile")
    phonecode = data_dict.get("phonecode")
    password = data_dict.get("password")

    if not all([mobile, phonecode, password]):
        return jsonify(errno=RET.PARAMERR, errmsg="参数不全")

    # 2. 从redis中获取指定手机号对应的短信验证码的
    try:
        sms_code = sr.get("SMS_" + mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="获取本地验证码失败")

    if not sms_code:
        return jsonify(errno=RET.NODATA, errmsg="短信验证码过期")

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

    # 4. 初始化 user 模型,并设置数据并添加到数据库
    user = User()
    user.name = mobile
    user.mobile = mobile
    # 对密码进行处理
    user.password = password

    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DATAERR, errmsg="数据保存错误")

    session["user_id"] = user.id
    session["name"] = user.name
    session["mobile"] = user.mobile

    return jsonify(errno=RET.OK, errmsg="注册成功")
예제 #4
0
파일: verify.py 프로젝트: WenbinYu/iHomeWeb
def register():
    resq = request.json
    if not resq:
        return jsonify(errno=RET.PARAMERR, errmsg='请求参数缺失')
    mobile = resq.get('mobile')
    clien_sms_code = resq.get('smscode')
    password = resq.get('password')

    if not all([mobile, clien_sms_code, password]):
        return jsonify(errno=RET.DATAERR, errmsg='请求参数不全')
    try:
        user = User.query.filter_by(mobile=mobile).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='校对用户表失败')
    if user:
        return jsonify(errno=RET.DATAERR, errmsg='用户已注册')
    try:
        server_sms_code = redis_store.get('mobile:' + mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='查询短信验证码失败')
    if not server_sms_code:
        return jsonify(errno=RET.DATAEXIST, errmsg='短信验证码失效')
    if server_sms_code != clien_sms_code:
        return jsonify(errno=RET.DATAERR, errmsg='短信验证码不正确')
    try:
        redis_store.delete('mobile:' + mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='删除短信验证码失败')
    # user = User(name=mobile, mobile=mobile)
    user = User()
    user.name = mobile
    user.mobile = mobile
    user.password = password
    try:
        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='写入用户表错误')
    session['name'] = user.name
    session['user_id'] = user.id
    session['mobile'] = mobile
    return jsonify(errno=RET.OK, errmsg='OK')
예제 #5
0
def registe():

    # 获取参数判断是否空
    date_dict = request.json
    mobile = date_dict.get("mobile")
    phonecode = date_dict.get("phonecode")
    password = date_dict.get("password")

    if not all([mobile,phonecode,password]):
        return jsonify(erron=RET.PARAMERR,errmsg="参数不全")

    #取到本地验证码
    try:
        sms_code = redis_store.get("SMS_"+mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(erron=RET.DATAERR,errmsg="本地短信验证码获取失败")
    if not sms_code:
        return jsonify(erron=RET.NODATA,errmsg="短信验证码过期")
    # 本地验证码和传入的短信验证码进行对比
    if phonecode != sms_code:
        return jsonify(erron=RET.DATAERR,errmsg="短信验证码错误")

    user = User()
    user.name = mobile
    user.mobile = mobile
    user.password = password

    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(erron=RET.DBERR,errmsg="保存数据失败")

    # 保存登陆状态
    session["name"] = mobile
    session["moblie"] = mobile
    session["user_id"] = user.id

    return jsonify(erron=RET.OK,errmsg="注册成功")
예제 #6
0
def register():
    dict_data = request.json
    mobile = dict_data.get("mobile")
    sms_code = dict_data.get("sms_code")
    password = dict_data.get("password")

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

    if not re.match(r"1[3456789]\d{9}", mobile):
        return jsonify(errno=RET.DATAERR, errmsg="手机号码格式不对")
    try:
        redis_sms_code = redis_store.get("sms_code:%s" % 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.DBERR, errmsg="短信验证码已经过期")

    try:
        redis_store.delete("sms_code:%s" % mobile)
    except Exception as e:
        return jsonify(errno=RET.DATAERR, errmsg="短信验证码填写出错")
    user = User()

    user.name = mobile
    user.mobile = mobile
    user.pasword = password

    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="用户注册失败")

    return jsonify(errno=RET.OK, errmsg="注册成功")
예제 #7
0
파일: passport.py 프로젝트: Swiftie92/ihome
def register():
    # 1. 获取参数和判断是否有值
    Post_register = request.json
    mobile = Post_register.get('mobile')
    ses_code = Post_register.get('phonecode')
    password = Post_register.get('password')
    if not all([mobile, ses_code, password]):
        current_app.logger.error("参数不足")
        return jsonify(errno=RET.PARAMERR, errsmg="参数不足")
    # 判断手机号码
    if not re.match(r"1[2345678][0-9]{9}", mobile):
        return jsonify(errno=RET.PARAMERR, errmsg="手机号码格式错误")
    # 2. 从redis中获取指定手机号对应的短信验证码的
    try:
        real_sms_code = sr.get("SMS_CODE_%s" % mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询redis中短信验证码异常")

    # 3. 校验验证码
    if ses_code != real_sms_code:
        #  3.3 不相等:短信验证码填写错误
        return jsonify(errno=RET.DATAERR, errmsg="短信验证码填写错误")

    # 4. 初始化 user 模型,并设置数据并添加到数据库
    user = User()
    user.name = mobile
    user.mobile = mobile
    user.password = password
    # 5. 保存当前用户的状态
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="保存对象异常")
    # 6. 返回注册的结果
    return jsonify(errno=RET.OK, errmsg="注册成功")
예제 #8
0
def register():
    # 获取参数
    request_dict = request.json
    mobile = request_dict.get('mobile')
    sms_code_client = request_dict.get('sms_code')
    password = request_dict.get('password')
    password2 = request_dict.get('password2')
    # 判断参数有效性
    if not all([mobile, sms_code_client, password, password2]):
        return jsonify(errno=RET.PARAMERR, errmsg='参数不完整')
    if not re.match(r'^1[3-8]\d{9}$', mobile):
        return jsonify(errom=RET.PARAMERR, errmsg='手机号码格式不合法')
    if password != password2:
        return jsonify(errno=RET.PARAMERR, errmsg='两次输入的密码不一致')
    try:
        sms_code_server = redis_store.get('sms_code:%s' % mobile)
    except Exception as e:
        return jsonify(errno=RET.DBERR, errmsg=error_map[RET.DBERR])
    if not sms_code_server:
        return jsonify(errno=RET.DATAERR, errmsg='验证码不存在,请先获取验证码')
    if sms_code_client != sms_code_server:
        return jsonify(errno=RET.PARAMERR, errmsg='手机验证码错误')
    user = User()
    user.mobile = mobile
    user.name = mobile
    user.password = password
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        print(e)
        db.session.rollback()

    session['user_id'] = user.id
    session['name'] = user.name
    session['mobile'] = user.mobile
    return jsonify(errno=RET.OK, errmsg='注册成功')
예제 #9
0
def register():
    """
    用户注册功能:
    1. 接收参数(手机号,短信验证码,密码)并进行参数校验
    2. 从redis中获取短信验证码(如果取不到,说明短信验证码已过期)
    3. 对比短信验证码,如果一致
    4. 创建User对象并保存注册用户的信息
    5. 把注册用户的信息添加进数据库
    6. 返回应答,注册成功
    """
    # 1. 接收参数(手机号,短信验证码,密码)并进行参数校验
    req_dict = request.json
    mobile = req_dict.get("mobile")
    sms_code = req_dict.get("sms_code")
    password = req_dict.get("password")

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

    if not re.match(r"^1[35789]\d{9}$", mobile):
        return jsonify(errno=RET.PARAMERR, errmsg="手机号格式不正确")

    # 2. 从redis中获取短信验证码(如果取不到,说明短信验证码已过期)
    try:
        real_sms_code = redis_store.get("smscode:%s" % mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="获取短信验证码失败")

    if not real_sms_code:
        return jsonify(errno=RET.NODATA, errmsg="短信验证码已过期")

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

    # 判断手机号是否已经被注册
    try:
        user = User.query.filter(User.mobile == mobile).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询用户信息失败")

    if user:
        return jsonify(errno=RET.DATAEXIST, errmsg="手机号已注册")

    # 4. 创建User对象并保存注册用户的信息
    user = User()
    user.mobile = mobile
    user.name = mobile
    user.password = password

    # 5. 把注册用户的信息添加进数据库
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="保存注册用户信息失败")

    # 记住用户登录状态
    session["user_id"] = user.id
    session["username"] = user.name
    session["mobile"] = mobile

    # 6. 返回应答,注册成功
    return jsonify(errno=RET.OK, errmsg="注册成功")
예제 #10
0
def register():
    """实现注册
    1.获取请求参数:手机号,短信验证码,密码
    2.判断参数是否缺少
    3.获取服务器的短信验证码
    4.并与客户端传入的验证码比较,如果一致
    5.创建User模型类对象
    6.保存注册数据到数据库
    7.响应结果
    """

    # 1.获取请求参数:手机号,短信验证码,密码
    # json_str = request.data
    # json_dict = json.loads(json_str)
    # json_dict = request.get_json()
    json_dict = request.json

    mobile = json_dict.get('mobile')
    sms_code_clinet = json_dict.get('sms_code')
    password = json_dict.get('password')

    # 2.判断参数是否缺少
    if not all([mobile, sms_code_clinet, password]):
        return jsonify(errno=RET.PARAMERR, errmsg='缺少参数')

    # 3.获取服务器的短信验证码
    try:
        sms_code_server = redis_store.get('Mobile:' + mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='查询短信验证码失败')
    # 判断数据是否为空
    if not sms_code_server:
        return jsonify(errno=RET.NODATA, errmsg='短信验证码不存在')

    # 4.并与客户端传入的验证码比较,如果一致
    if sms_code_server != sms_code_clinet:
        return jsonify(errno=RET.DATAERR, errmsg='输入验证码有误')

    # 5.创建User模型类对象
    user = User()
    # 注册时,默认手机号就是用户名,如果后面需要更换用户名,也是提供的有接口和界面
    user.name = mobile
    user.mobile = mobile
    # 密码需要加密后才能存储
    # user.password_hash = '加密后的密码'
    user.password = password

    # 6.保存注册数据到数据库
    try:
        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='保存注册数据失败')

    # 实现注册成功即登陆:记住状态保持信息即可
    session['user_id'] = user.id
    session['name'] = user.name
    session['mobile'] = user.mobile

    # 7.响应结果
    return jsonify(errno=RET.OK, errmsg='注册成功')
예제 #11
0
def register():
    """
    注册:
    简单提示:
    获取参数
    校验参数
    查询数据
    模型对象
    提交数据
    保存状态
    返回结果
    :return:
    """
    # TODO 完成注册代码
    params_dict = request.json
    mobile = params_dict.get("mobile")
    password = params_dict.get("password")
    sms_code = params_dict.get("sms_code")

    if not all([mobile, password, sms_code]):
        return jsonify(errno=RET.PARAMERR, errmsg="参数不足")
    # 验证手机号的格式
    if not re.match("^1[356789][0-9]{9}$", mobile):
        return jsonify(erron=RET.PARAMERR, errmsg="手机格式有误")
    # 查询数据库,是否存在该手机号
    try:
        user = User.query.filter_by(mobile=mobile).first()
        if user:
            return jsonify(errno=RET.DATAEXIST, errmsg="用户已存在")
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='查询数据库异常')

    # 根据手机号的验证编码,取出数据库的验证码,进行比较
    try:
        real_sms_code = redis_store.get('SMSCode_' + mobile)
        if real_sms_code:
            redis_store.delete("sms_%s" % mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="获取短信验证码数据库异常")
    if not real_sms_code:
        # 没有值表示短信验证码过期了
        return jsonify(errno=RET.NODATA, errmsg="短信验证码过期")
    if sms_code != real_sms_code:
        return jsonify(errno=RET.PARAMERR, errmsg="短信验证码填写错误")

    # 创建用户对象 给对应属性赋值
    user = User()

    user.mobile = mobile
    user.name = mobile

    # 需要将加密的密码加密
    user.password = password

    # 记录一下最后一次保存的登录时间
    user.create_time = datetime.now()

    # 保存数据
    try:
        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="保存用户对象到数据库异常")

    # 使用session保存当前的数据,直接进行登录
    session["user_id"] = user.id
    session["mobile"] = user.mobile
    session["name"] = user.name

    # 返回响应对象
    return jsonify(errno=RET.OK, errmsg="注册成功!")
예제 #12
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="注册成功")
예제 #13
0
def register():
    """
    用户注册功能
    1.接受参数(手机号,短信验证码,密码)并进行参数校验
    2.从redis中获取短信验证码(如果取不到,说明短信验证码过期)
    3.对比短信验证码,
    4.如果一致,创建User对象并保存注册用户的信息
    5.把注册用户的信息添加进数据库
    6.返回应答,注册成功
    :return:
    """
    # 1.接受参数(手机号,短信验证码,密码)并进行参数校验
    req_dict = request.json
    mobile = req_dict.get('mobile')
    sms_code = req_dict.get('sms_code')
    password = req_dict.get('password')

    if not all([mobile, sms_code, password]):
        return jsonify(errno=RET.PARAMERR, errmsg='参数不完整!')

    if not re.match(r'^1[35789]\d{9}$', mobile):
        return jsonify(errno=RET.PARAMERR, errmsg='手机号格式不正确!')

    # 2.从redis中获取短信验证码(如果取不到,说明短信验证码过期)
    try:
        real_sms_code = redis_store.get('smscode: %s' % mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='获取短信验证码失败')

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

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

    # 判断手机号是否已经被注册
    try:
        user = User.query.filter(User.mobile == mobile).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='查询用户信息失败')

    if user:
        return jsonify(errno=RET.DATAEXIST, errmsg='手机号已被注册')

    # 4.如果一致,创建User对象并保存注册用户的信息
    user = User()
    user.mobile = mobile
    user.name = mobile
    # todo: 注册码加密
    user.password = password

    # 5.把注册用户的信息添加进数据库
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='保存注册用户信息失败')

    # 6.记住用户登录的状态
    session['user_id'] = user.id
    session['username'] = user.name
    session['mobile'] = user.mobile

    # 7.返回应答,注册成功
    return jsonify(errno=RET.OK, errmsg='注册成功')
예제 #14
0
def register():
    # 注册视图
    '''
    该接口做用户注册
    1.图片验证码的生成,显示---使用工具包



    '''

    # 1.获取参数,手机号,密码,用户短信验证码,uuid
    # 2.判断参数完整性
    # 3.获取服务器存储的短信验证码,比较两个验证码
    # 4.验证码相同就创建新用户---添加数据,保存数据
    # 5.返回结果



    # 1.获取参数
    json_dict = request.json  #获取前端传递的json数据转换成字典类型数据
    mobile = json_dict.get('mobile') # 获取手机号码
    psw = json_dict.get('password') # 获取密码
    # uuid = json_dict.get('uuid')
    sms_code_client = json_dict.get('sms_code')

    # 2.判断完整性
    if not all([mobile,psw,sms_code_client]):
        jsonify(errno=RET.DATAERR, errmsg=u'数据不完整')


    # 判断手机号码的有效性

    # if User.query.filter(User.mobile == mobile).first():
    #     return jsonify(errno=RET.DATAEXIST, errmsg='用户已经存在')

    user = None
    try:
        user = User.query.filter(User.mobile == mobile).first()
    except Exception as e:
        current_app.logger.debug(e)
    if user:
        return jsonify(errno=RET. USERERR , errmsg=u'该手机号已注册')


    # 3.获取服务器存储的短信验证码   拼接key
    sms_key = 'sms:%s' %mobile
    try:
        sms_code_server = redis_store.get(sms_key)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET. NODATA , errmsg=u'找不到验证码')

    if not sms_code_server:
        return jsonify(errno=RET.NODATA, errmsg=u'短信验证码不存在')

    # 4.判断短信验证码是否一致
    if sms_code_server != sms_code_client:
        jsonify(errno=RET.DATAERR  , errmsg=u'短信验证码不正确')

    # 5.验证码相同就创建新用户

    user = User()
    user.name = mobile
    user.mobile = mobile
    # user.password_hash = psw
    user.password = psw  # 这里是设置了一个password属性来接受明文密码  然后在models进行加密

    try:
        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=u'用户创建失败')
    try:
        session['user_id'] = user.id
        session['user_mobile'] = user.mobile
        session['user_name'] = user.name
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DATAERR, errmsg=u'登陆状态保存失败')


    return jsonify(errno=RET.OK , errmsg=u'用户创建成功')
예제 #15
0
def register():
    """
    注册
    :param: 手机号,短信验证码,密码,确认密码
    :return:json
    """
    # 获取参数
    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[345678]\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)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='读取真实短信验证码异常')

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

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

    # 判断用户填写的短信验证码是否正确
    # 从redis中取出的是bytes类型,需要解码
    real_sms_code = real_sms_code.decode()
    if real_sms_code != sms_code:
        return jsonify(errno=RET.DATAERR, errmsg='短信验证码错误')

    # 保存用户注册数据到数据库
    user = User()
    user.name = mobile
    user.mobile = mobile
    user.password = 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:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DATAERR, errmsg='查询数据库异常')

    # 保存登录状态到session
    session['name'] = mobile
    session['mobile'] = mobile
    session['user_id'] = user.id

    return jsonify(errno=RET.OK, errmsg='注册成功')
예제 #16
0
def register():
    '''
    1、接收参数(手机号,短信验证码,密码)并验证
    2、从redis中获取短信验证码,如果获取不到说明过期
    3、对比短信验证码
    4、创建User对象并保存注册用户的信息
    5、把注册信用户信息添加进数据库
    6、返回应答,注册成功
    '''
    # 1、接收参数(手机号,短信验证码,密码)并验证
    req_dict = request.json
    mobile = req_dict.get('mobile')
    sms_code = req_dict.get('sms_code')
    password = req_dict.get('password')

    if not all([mobile, sms_code, password]):
        return jsonify(errno=RET.PARAMERR, errmsg='参数不完整')

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

    # 2、从redis中获取短信验证码,如果获取不到说明过期
    try:
        real_sms_code = redis_store.get('smscode:%s' % mobile)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='获取短信验证码失败')
    if not real_sms_code:
        return jsonify(errno=RET.NODATA, errmsg='短信验证码已过期')

    # 3、对比短信验证码
    if real_sms_code != sms_code:
        return jsonify(errno=RET.DATAERR, errmsg='短信验证码错误')
    # 判断手机号是否已经被注册
    try:
        user = User.query.filter(User.mobile == mobile).first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='查询用户信息失败')
    if user:
        return jsonify(errno=RET.DATAEXIST, errmsg='手机已被注册')

    # 4、创建User对象并保存注册用户的信息
    user = User()
    user.mobile = mobile
    user.name = mobile
    # todo:密码加密
    user.password = password

    # 5、把注册信用户信息添加进数据库
    try:
        db.session.add(user)
        db.session.commit()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='保存用户信息失败')
    # 记住用户登陆状态
    session['user_id'] = user.id
    session['user_name'] = user.name
    session['mobile'] = mobile

    # 6、返回应答,注册成功
    return jsonify(errno=RET.OK, errmsg='注册成功')