def change_info(message): """ 修改个人信息 :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) params = request.values.to_dict() passwords = set_password(params['password']) sys_user = SysUser(params['username'], passwords, params['email'], params['avatar']) result = SysUser.update(sys_user) if result is None: # 为空说明存入数据库没有报错 sys_user = SysUser.get_info(params['username']) token = Verificate.encode_auth_token( sys_user.id, sys_user.last_login.strftime("%Y-%m-%d %H:%M:%S")) data = { 'info': { 'username': sys_user.username, 'password': sys_user.password, 'email': sys_user.email, 'avatar': sys_user.avatar }, 'token': token.decode() } return jsonify( response.return_message(data, Message.SUCCESS.value, Code.SUCCESS.value)) else: return jsonify( response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value))
def verify(): params = request.values.to_dict() enter_username = params['username'] enter_email = params['email'] if SysUser.verify(enter_username, enter_email) is True: # 获取毫秒级时间戳 t = time.time() ms_t = int(round(t * 1000)) # 将邮箱前两位设为* ''' re.sub()有5个参数,三个必选参数pattern,repl,string;两个可选参数count,flags re.sub(pattern,repl,string,count,flags) pattern:表示正则表达式中的模式字符串; repl:被替换的字符串,或者是一个方法(既可以是字符串,也可以是函数); 当repl为字符串的时候,也就是需要 将string中与pattern匹配的字符串都替换成repl 当repl为方法的时候,就必须是一个带有一个参数,且参数为MatchObject类型的方法,该方法需要返回一个字符串。 string:要被处理的,要被替换的字符串; count:指的是最大的可以被替换的匹配到的字符串的个数,默认为0,就是所有匹配到的字符串。 flgas:标志位 ''' reset_email1 = re.sub(enter_email[:2], '**', enter_email) # .encode() :用来转换成bytes数组 sid = base64.b64encode( (enter_username + str(ms_t) + reset_email1).encode()).decode() print(sid) return CommonUtil.send_email('*****@*****.**', sid) else: return jsonify( response.return_message(data="test", msg=Message.VERIFY_FAILED.value, code=Code.BAD_REQUEST.value))
def upload(message): """ 上传图片 :return: 返回图片链接 """ if message['code'] != Code.SUCCESS.value: return jsonify(message) base64_str = request.values.get('img') username = request.values.get('username') CommonUtil.handle_img(base64_str, 'avatar.webp') result = CommonUtil.upload_img('avatar.webp') if result is not None: result_avatar = SysUser.update_avatar(username, result) if result_avatar is None: return jsonify( response.return_message(data={ 'image_url': result, 'token': Verificate.encode_auth_token( message['data']['id'], message['data']['last_login']).decode() }, msg=Message.UPLOAD_SUCCESS.value, code=Code.SUCCESS.value)) return jsonify( response.return_message(data=None, msg=Message.UPLOAD_FAILED.value, code=Code.BAD_REQUEST.value))
def reset_pwd(): """ 重置密码 :return: """ params = request.values.to_dict() passwords = None if params['password'] == '' else set_password( params['password']) sys_user = SysUser(params['username'], passwords, params['email'], params['avatar']) result = SysUser.update(sys_user) if result is None: return jsonify( response.return_message(None, Message.SUCCESS.value, Code.SUCCESS.value)) else: return jsonify( response.return_message(None, Message.BAD_REQUEST.value, Code.BAD_REQUEST.value))
def register(): """ 注册管理员 :return: 用户基本信息 """ username = request.values.get('username') password = set_password(request.values.get('password')) email = request.values.get('email') avatar = request.values.get('avatar') sys_user = SysUser(username, password, email, avatar) result = SysUser.save(sys_user) if result is None: sys_user = SysUser.get_info(username) data = {"id": sys_user.id, "username": username} return jsonify( response.return_message(data, Message.REGISTER_SUCCESS.value, Code.SUCCESS.value)) else: return jsonify( response.return_message(None, Message.REGISTER_FAILED.value, Code.BAD_REQUEST.value))
def verify(): """ 校验用户名和邮箱 :return: """ params = request.values.to_dict() enter_username = params['username'] enter_email = params['email'] # 用户信息校验成功 if SysUser.verify(enter_username, enter_email) is True: # 获取毫秒级时间戳 t = time.time() ms_t = int(round(t * 1000)) # 将邮箱前两位设为* ''' re.sub()有5个参数,三个必选参数pattern,repl,string;两个可选参数count,flags re.sub(pattern,repl,string,count,flags) pattern:表示正则表达式中的模式字符串; repl:被替换的字符串,或者是一个方法(既可以是字符串,也可以是函数); 当repl为字符串的时候,也就是需要 将string中与pattern匹配的字符串都替换成repl 当repl为方法的时候,就必须是一个带有一个参数,且参数为MatchObject类型的方法,该方法需要返回一个字符串。 string:要被处理的,要被替换的字符串; count:指的是最大的可以被替换的匹配到的字符串的个数,默认为0,就是所有匹配到的字符串。 flgas:标志位 ''' reset_email1 = re.sub(enter_email[:2], '**', enter_email) # 整合参数格式 encrypt_params = 'username={}&email={}×tamp={}'.format( enter_username, reset_email1, str(ms_t)) # .encode() :用来转换成bytes数组 sid = base64.b64encode(encrypt_params.encode()).decode() # 接收发送返回消息 send_result = CommonUtil.send_email(enter_email, sid) # 如果发送失败,则会返回失败原因 if send_result: return jsonify( response.return_message(data=send_result, msg=Message.EMAIL_SEND_FAILED.value, code=Code.FORBIDDEN.value)) # 否则发送成功 return jsonify( response.return_message(data=None, msg=Message.EMAIL_SEND_SUCCESS.value, code=Code.SUCCESS.value)) # 用户信息校验失败 else: return jsonify( response.return_message(data=None, msg=Message.VERIFY_FAILED.value, code=Code.BAD_REQUEST.value))
def reset_pwd(): """ 重置密码 :return: """ params = request.values.to_dict() password = params['password'] if password is None or len(password) < Constant.PASSWORD_LENGTH.value: return jsonify( response.return_message(None, Message.PASSWORD_LENGTH_LESS_THAN.value, Code.BAD_REQUEST.value)) passwords = set_password(password) result = SysUser.reset_password(params['username'], passwords) if result is None: return jsonify( response.return_message(None, Message.SUCCESS.value, Code.SUCCESS.value)) else: return jsonify( response.return_message(None, Message.RESET_PASSWORD_FAILED.value, Code.BAD_REQUEST.value))
def info_page(message): """ 用户信息页面 :return: """ if message['code'] != Code.SUCCESS.value: return jsonify(message) username = request.values.get('username') sys_user = SysUser.get_info(username) token = Verificate.encode_auth_token( sys_user.id, sys_user.last_login.strftime("%Y-%m-%d %H:%M:%S")) data = { 'info': { 'username': sys_user.username, 'password': sys_user.password, 'email': sys_user.email, 'avatar': sys_user.avatar }, 'token': token.decode() } return jsonify( response.return_message(data, Message.SUCCESS.value, Code.SUCCESS.value))