def get(self, user_id, thumbnail=None): avatar = yield AvatarDocument.find_one({ 'owner': DBRef(UserDocument.meta['collection'], ObjectId(user_id)) }) modified = avatar['upload_time'] self.set_header('Last-Modified', modified) self.set_header('Content-Type', avatar['content_type']) self.set_header('Cache-Control', 'public') ims_value = self.request.headers.get('If-Modified-Since') if ims_value is not None: date_tuple = email.utils.parsedate(ims_value) if_since = datetime.fromtimestamp(time.mktime(date_tuple)) if if_since >= modified.replace(microsecond=0): self.set_status(304) self.finish() else: self._send_avatar(avatar, thumbnail) else: self._send_avatar(avatar, thumbnail)
def post(self): response_data = {} form = RegisterForm(self.request.arguments) if form.validate(): name = form.name.data email = form.email.data password = form.password.data if (yield UserDocument.find_one({'name': name})): response_data["error"] = "用户名已被占用" if (yield UserDocument.find_one({"email": email})): response_data["error"] = "邮箱已被注册" if not response_data: password = yield UserDocument.encrypt_password(password) document = { 'email': email, 'name': name, 'password': password, 'user_type': "person", 'register_date': datetime.now() } try: user_id = yield UserDocument.insert(document) except: raise HTTPError(500) # 头像初始化 avatar = open( os.path.join(APPLICATION_SETTINGS['static_path'], 'img/default.jpg')) content = avatar.read() avatar.close() document = { 'name': 'default.jpg', 'upload_time': datetime.now(), 'content_type': 'jpeg', 'owner': DBRef(UserDocument.meta['collection'], ObjectId(user_id)), 'content': Binary(content), 'thumbnail50x50': Binary(content), 'thumbnail180x180': Binary(content) } yield AvatarDocument.insert(document) # 用户设置初始化 _ = yield OfficialProfileCoverDocument.get_profile_cover_list() profile_cover = random.sample(_, 1)[0] document = { 'user': DBRef(UserDocument.meta['collection'], ObjectId(user_id)), 'profile_cover': DBRef(OfficialProfileCoverDocument.meta['collection'], ObjectId(profile_cover['_id'])) } yield UserSettingDocument.insert(document) # Ejabberd注册 try: Ejabberd.register(user_id, password) except: pass # 给用户发送验证邮件 document = { 'uid': user_id, 'code': CodeDocument.generate_code(), 'expired_time': datetime.now() + timedelta(days=USER_SETTINGS['code_expired_after']) } code_id = yield CodeDocument.insert(document) WriterManager.pub(MessageTopic.SEND_ACTIVATION_EMAIL, code_id) response_data.update( {'success': '注册成功! 系统已经向你的注册邮箱发送了一封激活' '邮件, 请验证后登录!'}) else: for field in form.errors: response_data.update({'error': form.errors[field][0]}) break self.finish(json.dumps(response_data))
def post(self): response_data = {} form = RegisterForm(self.request.arguments) if form.validate(): name = form.name.data email = form.email.data password = form.password.data if (yield UserDocument.find_one({'name': name})): response_data["error"] = "用户名已被占用" if (yield UserDocument.find_one({"email": email})): response_data["error"] = "邮箱已被注册" if not response_data: password = yield UserDocument.encrypt_password(password) document = { 'email': email, 'name': name, 'password': password, 'user_type': "person", 'register_date': datetime.now() } try: user_id = yield UserDocument.insert(document) except: raise HTTPError(500) # 头像初始化 avatar = open(os.path.join( APPLICATION_SETTINGS['static_path'], 'img/default.jpg') ) content = avatar.read() avatar.close() document = { 'name': 'default.jpg', 'upload_time': datetime.now(), 'content_type': 'jpeg', 'owner': DBRef( UserDocument.meta['collection'], ObjectId(user_id) ), 'content': Binary(content), 'thumbnail50x50': Binary(content), 'thumbnail180x180': Binary(content) } yield AvatarDocument.insert(document) # 用户设置初始化 _ = yield OfficialProfileCoverDocument.get_profile_cover_list() profile_cover = random.sample(_, 1)[0] document = { 'user': DBRef( UserDocument.meta['collection'], ObjectId(user_id) ), 'profile_cover': DBRef( OfficialProfileCoverDocument.meta['collection'], ObjectId(profile_cover['_id']) ) } yield UserSettingDocument.insert(document) # Ejabberd注册 try: Ejabberd.register(user_id, password) except: pass # 给用户发送验证邮件 document = { 'uid': user_id, 'code': CodeDocument.generate_code(), 'expired_time': datetime.now() + timedelta( days=USER_SETTINGS['code_expired_after'] ) } code_id = yield CodeDocument.insert(document) WriterManager.pub(MessageTopic.SEND_ACTIVATION_EMAIL, code_id) response_data.update({ 'success': '注册成功! 系统已经向你的注册邮箱发送了一封激活' '邮件, 请验证后登录!' }) else: for field in form.errors: response_data.update({'error': form.errors[field][0]}) break self.write_json(response_data)
def get(self, option): if option == 'avatar': avatar = yield AvatarDocument.find_one({ 'owner': DBRef( UserDocument.meta['collection'], ObjectId(self.current_user['_id']) ) }) self.render( 'setting/template/setting-avatar.html', avatar=avatar, preview=self.get_avatar(self.current_user['_id']) ) elif option == 'profile': user_setting = yield UserSettingDocument.find_one({ 'user': DBRef( UserDocument.meta['collection'], ObjectId(self.current_user['_id']) ) }) self.render( 'setting/template/setting-profile.html', user_setting=user_setting ) elif option == 'password': self.render('setting/template/setting-password.html') elif option == 'profile/cover': cover_list_f = OfficialProfileCoverDocument.get_profile_cover_list profile_cover_list = yield cover_list_f() user_setting = yield UserSettingDocument.find_one({ 'user': DBRef( UserDocument.meta['collection'], ObjectId(self.current_user['_id']) ) }) self.render( 'setting/template/setting-profile-cover.html', profile_cover_list=profile_cover_list, user_setting=user_setting ) elif option == 'private': user_setting = yield UserSettingDocument.find_one({ 'user': DBRef( UserDocument.meta['collection'], ObjectId(self.current_user['_id']) ) }) self.render( 'setting/template/setting-private.html', user_setting=user_setting ) elif option == 'notification': user_setting = yield UserSettingDocument.find_one({ 'user': DBRef( UserDocument.meta['collection'], ObjectId(self.current_user['_id']) ) }) self.render( 'setting/template/setting-notification.html', user_setting=user_setting ) elif option == 'theme': user_setting = yield UserSettingDocument.find_one({ 'user': DBRef( UserDocument.meta['collection'], ObjectId(self.current_user['_id']) ) }) self.render( 'setting/template/setting-theme.html', user_setting=user_setting ) else: raise HTTPError(404)
def post(self): form = AvatarSetForm(self.request.arguments) if not form.validate() or 'avatar' not in self.request.files: raise HTTPError(404) x = form.x.data y = form.y.data w = form.w.data h = form.h.data target_width = form.target_width.data crop_area = { 'x': x, 'y': y, 'w': w, 'h': h, 'target_width': target_width } upload_file = self.request.files['avatar'][0] document = { 'name': upload_file['filename'], 'upload_time': datetime.now(), 'content': Binary(upload_file['body']), 'content_type': upload_file['content_type'], 'owner': DBRef( UserDocument.meta['collection'], ObjectId(self.current_user['_id']) ), 'crop_area': crop_area } try: image = Image.open(StringIO(upload_file['body'])) except: raise HTTPError(404) scale = image.size[0] * 1.0 / target_width x = int(x * scale) y = int(y * scale) w = int(w * scale) h = int(h * scale) box = (x, y, x + w, y + h) image = image.crop(box) output50x50 = StringIO() output180x180 = StringIO() image50x50 = image.resize((50, 50), Image.ANTIALIAS) image180x180 = image.resize((180, 180), Image.ANTIALIAS) image50x50.save( output50x50, document['content_type'].split('/')[1].upper(), quality=100 ) image180x180.save( output180x180, document['content_type'].split('/')[1].upper(), quality=100 ) document['thumbnail50x50'] = Binary(output50x50.getvalue()) document['thumbnail180x180'] = Binary(output180x180.getvalue()) output50x50.close() output180x180.close() user_dbref = DBRef( UserDocument.meta['collection'], ObjectId(self.current_user['_id']) ) yield AvatarDocument.remove({'owner': user_dbref}, multi=True) yield AvatarDocument.insert(document) yield UserDocument.update( {'_id': ObjectId(self.current_user['_id'])}, {'$set': {'avatar_updated': True}} ) self.finish()