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" 链接,会注销用户并重定向到登录页面。
通过以上例子,我们实现了用户登录与权限控制的功能。根据不同的应用需求,我们还可以进一步扩展和调整这个基本的实现。
