欢迎访问宙启技术站
智能推送

Bottle框架中实现用户登录与权限控制的实例代码

发布时间:2023-12-23 23:53:25

在 Bottle 框架中实现用户登录与权限控制可以通过使用 session 来实现。下面是一个基本的示例代码,实现了用户登录的功能和权限控制。

from bottle import route, run, request, redirect, response

# 模拟用户数据
users = {
    'admin': {
        'password': 'admin',
        'role': 'admin'
    },
    'user': {
        'password': 'password',
        'role': 'user'
    }
}

# 登录页面
@route('/login')
def login():
    return '''
        <form action="/login" method="post">
            <input name="username" type="text" placeholder="Username" /><br/>
            <input name="password" type="password" placeholder="Password" /><br/>
            <input value="Login" type="submit" />
        </form>
    '''

# 处理登录请求
@route('/login', method='POST')
def do_login():
    username = request.forms.get('username')
    password = request.forms.get('password')

    if username in users and users[username]['password'] == password:
        # 登录成功,设置用户的 session
        session_id = username
        response.set_cookie('session_id', session_id)
        redirect('/')
    else:
        return 'Login failed'

# 访问受保护的页面
@route('/')
def protected_page():
    session_id = request.get_cookie('session_id')
    if session_id and session_id in users:
        username = session_id
        role = users[username]['role']
        if role == 'admin':
            return 'Welcome, admin'
        else:
            return 'Welcome, user'
    else:
        return 'You are not logged in'

# 登出
@route('/logout')
def logout():
    response.delete_cookie('session_id')
    redirect('/')

# 启动应用
run(host='localhost', port=8080)

此示例中,我们通过定义 /login/login 路由来处理登录页面和登录请求。登录成功后,我们将用户的用户名作为 session ID 存储在 cookie 中。在受保护的页面 / 上,我们从 cookie 中获取 session ID 并验证用户的登录状态和权限。最后,我们定义了 /logout 路由来处理登出,即删除存储在 cookie 中的 session ID。

使用例子:

1. 运行示例代码后,访问 http://localhost:8080/login,可以看到登录页面。

2. 输入正确的用户名和密码(如 admin/admin)进行登录,会重定向到受保护的页面 http://localhost:8080/

3. 根据用户的角色不同,会显示不同的欢迎信息。

4. 在受保护的页面中点击 "Log out" 链接,会注销用户并重定向到登录页面。

通过以上例子,我们实现了用户登录与权限控制的功能。根据不同的应用需求,我们还可以进一步扩展和调整这个基本的实现。