async def api_verify_image_get(request): """ WEB API: 获取验证码图片API函数 :param request: 请求对象 :return: 验证码图片 """ num_str, image = generate_verify_image(configs.font_path) # 生成验证码图像COOKIE值 cookie_name = configs.verify_image_cookie.name cookie_secret = configs.verify_image_cookie.secret cookie_str = verify_image_cookie_generate(num_str, cookie_secret) json_data = json.dumps(dict(image=image), ensure_ascii=False, default=lambda o: o.__dict__) r = web.Response(body=json_data.encode('utf-8')) r.set_cookie(cookie_name, cookie_str, max_age=86400, httponly=True) r.content_type = 'application/json;charset=utf-8' return r
async def api_user_register(request): """ 用户注册API函数 :param request: 请求对象 :return: 注册成功则设置COOKIE,返回响应消息 """ _RE_EMAIL = re.compile( r'^[a-z0-9\.\-\_]+\@[a-z0-9\-\_]+(\.[a-z0-9\-\_]+){1,4}$') _RE_SHA1 = re.compile(r'^[0-9a-f]{40}$') request_data = RequestData(request) if not await request_data.json_load(): return data_error(u'非法数据格式, 请使用JSON格式') name = request_data.name email = request_data.email password = request_data.password verify = request_data.verify # 检查验证码是否输入正确 if not verify or not verify.strip(): return data_error(u'非法验证码') verify_cookie_name = configs.verify_image_cookie.name cookie_secret = configs.verify_image_cookie.secret cookie_str = request.cookies.get(verify_cookie_name) cookie_str_input = verify_image_cookie_generate(verify.upper(), cookie_secret) if not cookie_str == cookie_str_input: return data_error(u'验证码错误') # 检查用户数据是否合法 if not name or not name.strip(): return data_error(u'非法用户名') if not email or not _RE_EMAIL.match(email): return data_error(u'非法邮箱账号') if not password or not _RE_SHA1.match(password): return data_error(u'非法密码') # 检查用户邮箱是否已经被注册 users = await UserAuth.find_all(where='email=?', args=[email]) if len(users) > 0: return data_error(u'邮箱已经被使用') # 生成用户ID, 并且混合用户ID和密码进行SHA1加密 uid = generate_id() sha1_password = generate_sha1_password(uid, password) # 将新用户数据保存到数据库中 user = UserAuth(id=uid, email=email, password=sha1_password) await user.save() # 生成头像图片URL head_img_url = configs.domain_name head_img_url += '/static/img/head_%s.jpg' % random.randint(1, 15) user_info = UserInfo(id=uid, name=name.strip(), image=head_img_url) await user_info.save() # 生成COOKIE cookie_str = user_cookie_generate(user['id'], 86400, configs.user_cookie.secret) cookie_name = configs.user_cookie.name # 生成响应消息 r = web.Response() # 删除用于验证验证码的COOKIE r.set_cookie(verify_cookie_name, '-deleted-', max_age=0, httponly=True) r.set_cookie(cookie_name, cookie_str, max_age=86400, httponly=True) user['password'] = '******' r.content_type = 'application/json' r.body = json.dumps(user, ensure_ascii=False).encode('utf-8') return r