def validate(handler): request_path = sh.getEnv('REQUEST_URI').partition('?')[0] is_login = sh.session.get('is_login', False) is_admin = sh.session.get('is_admin', False) method = sh.getEnv('REQUEST_METHOD') # 禁止未登录用户访问REQUIRE_LOGIN_URL中的地址 if not is_login and request_path in REQUIRE_LOGIN_URL: return sh.redirectToLogin() # 禁止非admin用户访问admin页面 if not is_admin and request_path.startswith('/admin') and request_path != '/admin/login': return sh.redirect('/admin/login') return handler()
def POST(self): if not sh.session.is_login: return sh.redirectToLogin() user_model = sh.model('User') user = user_model.get(sh.session.id) inputs = sh.inputs() assert inputs.get('action', '') if inputs.action == 'upload': if inputs.get('image_file', ''): self.savePortrait(sh.session.id, inputs.image_file) return sh.redirect('/accounts/portrait') elif inputs.action == 'crop': if not user.image: return sh.alert('请先上传头像') assert int(float(inputs.get('region_width', '0'))) > 0 assert int(float(inputs.get('region_height', '0'))) > 0 real_width, real_height = sh.imageSize(user.image.url) # 图片的真实宽高 crop = inputs.crop region_width = int(float(inputs.region_width)) # 选择区域的宽度 region_height = int(float(inputs.region_height)) # 选择区域的高度 start_x = int(crop.split()[0]) # 选中的起始位置 start_y = int(crop.split()[1]) region_x = int(crop.split()[2]) # 选中的宽度 region_y = int(crop.split()[3]) # 选中的高度 # convert 裁剪区域 region = '%dx%d+%d+%d' % (region_x * real_width / region_width, region_y * real_height / region_height, real_width * start_x / region_width, real_height * start_y / region_height) path = sh.urlToPath(user.image.url) os.system('convert %s -crop %s %s' % (path, region, path + '.crop')) user_model.update(sh.session.id, {'crop': crop}) # 删除以前裁剪图片的各种尺寸副本 os.system('rm %s.crop_*' % path) return sh.redirect('/accounts')
def POST(self): inputs = sh.inputs() assert (6 <= len(inputs.new_password) < 60) user_model = sh.model('User') user_ctrl = sh.ctrl('User') if not sh.session.is_login: return sh.redirectToLogin() Userid = sh.session.id user = user_model.get(Userid) assert (user is not None) if not user_ctrl.validate(user.email, inputs.old_password): return sh.page.user.ResetPassword('原密码输入错误, 请重新输入') user_model.update(Userid, dict(password=inputs.new_password)) return sh.alert('重置密码成功', '/')
def validate(handler): request_path = sh.getEnv('REQUEST_URI').partition('?')[0] is_login = sh.session.get('is_login', False) is_admin = sh.session.get('is_admin', False) method = sh.getEnv('REQUEST_METHOD') # 禁止未登录用户访问REQUIRE_LOGIN_URL中的地址 if not is_login and request_path in REQUIRE_LOGIN_URL: return sh.redirectToLogin() # 禁止非admin用户访问admin页面 if not is_admin and request_path.startswith( '/admin') and request_path != '/admin/login': return sh.redirect('/admin/login') return handler()
def POST(self): inputs = sh.inputs() assert(6 <= len(inputs.new_password) < 60) user_model = sh.model('User') user_ctrl = sh.ctrl('User') if not sh.session.is_login: return sh.redirectToLogin() Userid = sh.session.id user = user_model.get(Userid) assert(user is not None) if not user_ctrl.validate(user.email, inputs.old_password): return sh.page.user.ResetPassword('原密码输入错误, 请重新输入') user_model.update(Userid, dict(password=inputs.new_password)) return sh.alert('重置密码成功', '/')
def POST(self): if not sh.session.is_login: return sh.redirectToLogin() user_model = sh.model('User') user = user_model.get(sh.session.id) inputs = sh.inputs() assert inputs.get('action', '') if inputs.action == 'upload': if inputs.get('image_file', ''): self.savePortrait(sh.session.id, inputs.image_file) return sh.redirect('/accounts/portrait') elif inputs.action == 'crop': if not user.image: return sh.alert('请先上传头像') assert int(float(inputs.get('region_width', '0'))) > 0 assert int(float(inputs.get('region_height', '0'))) > 0 real_width, real_height = sh.imageSize(user.image.url) # 图片的真实宽高 crop = inputs.crop region_width = int(float(inputs.region_width)) # 选择区域的宽度 region_height = int(float(inputs.region_height)) # 选择区域的高度 start_x = int(crop.split()[0]) # 选中的起始位置 start_y = int(crop.split()[1]) region_x = int(crop.split()[2])# 选中的宽度 region_y = int(crop.split()[3]) # 选中的高度 # convert 裁剪区域 region = '%dx%d+%d+%d' % (region_x * real_width / region_width, region_y * real_height / region_height, real_width * start_x / region_width, real_height * start_y / region_height) path = sh.urlToPath(user.image.url) os.system('convert %s -crop %s %s' % (path, region, path+'.crop')) user_model.update(sh.session.id, {'crop': crop}) # 删除以前裁剪图片的各种尺寸副本 os.system('rm %s.crop_*' % path) return sh.redirect('/accounts')
def GET(self): if not sh.session.is_login: return sh.redirectToLogin(sh.getEnv('REQUEST_URI')) user = sh.model('User').get(sh.session.id) return sh.page.user.Portrait(user)
def GET(self): inputs = sh.inputs() if sh.session.is_login: return sh.page.user.ResetPassword() else: return sh.redirectToLogin()