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='注册成功')
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='注册成功')
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="注册成功!")
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="注册成功")
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='注册成功')