简介
web.py的会话管理通过session来实现,通过将指定的标识存入进session来对用户进行识别,从而实现会话的管理。
session会在根目录创建sessions文件夹对session进行保存。
官网教程(主要看Sessions and user state 会话和用户状态):https://webpy.org/cookbook/index.zh-cn
入口程序
run.py
import web
#关闭调试模式
web.config.debug = False
urls = (
'/login','login',
'/login_sumbit','loginSumbit',
'/reset','reset',
)
render = web.template.render('templates')
app = web.application(urls, globals())
#使用session 初始化session的值
session = web.session.Session(app, web.session.DiskStore('sessions'),initializer = {'login': None, 'privilege':None})
#为了使子应用操作session,把session给到web.ctx.session
def session_hook():
web.ctx.session = session
app.add_processor(web.loadhook(session_hook))
#登陆页面
class login:
def GET(self):
#标记是登陆而不是注销
msg = 0
return render.login(msg)
#登陆表单提交
class loginSumbit:
def POST(self):
username, passwd = web.input().username, web.input().password
user = User()
#验证账号密码是否正确
if(user.webLogin(username, passwd)):
session.login = 1
#根据要求给不同的privilege,进行权限划分
if(username == "benzhu"):
session.privilege = 1
return web.seeother('/admin/index')
else:
session.privilege = 2
return web.seeother("/user/index")
else:
#标记账号或者密码错误
msg = 1
return render.login(msg)
#用户注销
class reset:
def GET(self):
session.login = 0
#删除对应的session
session.kill()
msg = 2
return render.login(msg)
if __name__ == '__main__':
app.run()
前端页面
部分内容。
/templates/login.html
<div class="login-div">
<h1>登录</h1>
<FORM id="login-form" action="/login_sumbit" method="post" onsubmit='return submitLogin()'>
<div class="login-form-item">
<input id="username" name="username" placeholder="用户名">
</div>
<div class="login-form-item">
<input id="password" name="password" type="password" placeholder="密码">
</div>
<button class="btn-login">登录</button>
</FORM>
</div>
<script>
if($msg == 1){
alert('账号或者密码错误!');
}
if($msg == 2){
alert('退出成功!');
}
function submitLogin(){
var username = $$("#username").val();
var password = $$("#password").val();
if(username!="" && password != ""){
return true;
}else {
alert('请输入账号和密码!');
return false;
}
}
</script>
子应用操作session
子应用不要忘记在主应用进行注册
#验证session的privilege是否为1的方法
def logged():
try:
if(web.ctx.session.privilege == 1):
return True
else:
return False
except:
return False
评论