简介

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