Compare commits
No commits in common. "50dc88833996e6aef5b5d1b533e9963474cc2a7e" and "01aa0afd3effbe01608b45292d28bd9d4b5d132b" have entirely different histories.
50dc888339
...
01aa0afd3e
|
|
@ -6,9 +6,11 @@
|
|||
<meta name="renderer" content="webkit"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
||||
<link href="static/css/layui.css" rel="stylesheet"/>
|
||||
<link
|
||||
href="//cdn.staticfile.org/layui/2.9.2/css/layui.css"
|
||||
rel="stylesheet"
|
||||
/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="layui-layout layui-layout-admin">
|
||||
<div class="layui-header">
|
||||
|
|
@ -37,7 +39,7 @@
|
|||
</div>
|
||||
<div class="layui-side layui-bg-black">
|
||||
<div class="layui-side-scroll">
|
||||
<!-- 动态加载菜单栏 -->
|
||||
<!-- 左侧导航区域(可配合layui已有的垂直导航) -->
|
||||
<ul class="layui-nav layui-nav-tree" lay-filter="test">
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -87,5 +87,7 @@
|
|||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
40
app/views.py
40
app/views.py
|
|
@ -50,20 +50,13 @@ def login():
|
|||
phone_number = request.form['username']
|
||||
password = request.form['password']
|
||||
db_manager = DatabaseManager()
|
||||
|
||||
result = db_manager.valid_login(phone_number, password) # 获取验证结果
|
||||
|
||||
# 确保用户已验证且活跃(未被禁用)
|
||||
if result['valid'] and result['status'] == 1:
|
||||
# 验证用户名和密码...
|
||||
if db_manager.valid_login(phone_number, password):
|
||||
# 登录成功
|
||||
session['username'] = phone_number
|
||||
session['role'] = result['identity'] # 设置用户角色
|
||||
return jsonify(success=True, message="登录成功")
|
||||
elif not result['status']:
|
||||
# 用户被禁用的情况
|
||||
return jsonify(success=False, message="账户已被禁用")
|
||||
else:
|
||||
# 其他登录失败情况
|
||||
# 登录失败
|
||||
return jsonify(success=False, message="无效的用户名或密码")
|
||||
|
||||
|
||||
|
|
@ -83,29 +76,22 @@ def home():
|
|||
@app.route('/logout')
|
||||
def logout():
|
||||
# 清除session中的所有信息
|
||||
session.pop('username', None) # 从会话中移除用户
|
||||
session.clear()
|
||||
# 返回一个响应,或者重定向到登录页面
|
||||
return redirect('/login')
|
||||
|
||||
|
||||
@app.route('/api/menu')
|
||||
def get_menu():
|
||||
db_manager = DatabaseManager()
|
||||
|
||||
# 从session中获取用户角色
|
||||
if 'role' in session:
|
||||
role = session['role']
|
||||
menu_items = db_manager.get_meun(role)
|
||||
|
||||
# 转换菜单项为期望的格式并返回
|
||||
print(menu_items)
|
||||
formatted_menu_items = [{"name": item['menu_name']} for item in menu_items]
|
||||
return jsonify(formatted_menu_items)
|
||||
|
||||
# 如果没有角色信息,可能用户未登录或session过期
|
||||
return jsonify([]), 401 # 未授权状态码
|
||||
|
||||
|
||||
# 根据用户角色或其他逻辑获取菜单项
|
||||
menu_items = [
|
||||
{"name": "课程信息", "link": "#"},
|
||||
{"name": "课程签到", "link": "#"},
|
||||
{"name": "公告信息", "link": "#"},
|
||||
{"name": "签到提醒", "link": "#"},
|
||||
# ... 其他菜单项
|
||||
]
|
||||
return jsonify(menu_items)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ import pymysql
|
|||
from db.connection import MySQLPool
|
||||
import bcrypt
|
||||
|
||||
|
||||
class DatabaseManager:
|
||||
def __init__(self):
|
||||
# 使用MySQLPool初始化数据库连接池
|
||||
|
|
@ -45,23 +44,12 @@ class DatabaseManager:
|
|||
return self.execute(sql, data)
|
||||
|
||||
def valid_login(self, phone_number, password_attempt):
|
||||
# SQL查询获取用户的哈希密码,身份和状态
|
||||
sql = "SELECT password, identity, status FROM user WHERE phone_number=%s LIMIT 1"
|
||||
# SQL查询获取用户的哈希密码
|
||||
sql = "SELECT password FROM user WHERE phone_number=%s LIMIT 1"
|
||||
result = self.fetch(sql, (phone_number,))
|
||||
if result:
|
||||
stored_hash = result[0]['password'] # 假设结果是密码字段
|
||||
identity = result[0]['identity'] # 用户身份
|
||||
status = result[0]['status'] # 用户状态
|
||||
|
||||
# 使用bcrypt进行密码验证
|
||||
if bcrypt.checkpw(password_attempt.encode('utf-8'), stored_hash.encode('utf-8')):
|
||||
# 密码匹配,返回登录成功,身份和状态
|
||||
return {'valid': True, 'identity': identity, 'status': status}
|
||||
|
||||
# 密码不匹配或用户不存在,返回登录失败
|
||||
return {'valid': False}
|
||||
|
||||
def get_meun(self, role):
|
||||
sql = "SELECT menu_name FROM menu_items WHERE role=%s ORDER BY `order`"
|
||||
result = self.fetch(sql, (role,))
|
||||
return result
|
||||
return True # 密码匹配,登录成功
|
||||
return False # 密码不匹配或用户不存在,登录失败
|
||||
|
|
|
|||
16
mysql.sql
16
mysql.sql
|
|
@ -4,12 +4,20 @@ CREATE TABLE user (
|
|||
phone_number VARCHAR(15) NOT NULL UNIQUE,
|
||||
password VARCHAR(255) NOT NULL,
|
||||
identity ENUM('teacher', 'student') NOT NULL,
|
||||
status BOOLEAN NOT NULL
|
||||
is_active BOOLEAN NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO user (nickname, phone_number, password, identity, status) VALUES
|
||||
('Alice', '1', '$2b$12$okY88GrzlUHb/Ox1ENwtqeBUnE0bgMOCPy.UKmFaTnu3El7EYX8Em', 'student', TRUE);
|
||||
|
||||
INSERT INTO user (nickname, phone_number, password, identity, is_active) VALUES
|
||||
('Alice', '10000000001', 'password1', 'student', TRUE),
|
||||
('Bob', '10000000002', 'password2', 'teacher', TRUE),
|
||||
('Carol', '10000000003', 'password3', 'student', FALSE),
|
||||
('David', '10000000004', 'password4', 'teacher', TRUE),
|
||||
('Eve', '10000000005', 'password5', 'student', TRUE),
|
||||
('Frank', '10000000006', 'password6', 'teacher', FALSE),
|
||||
('Grace', '10000000007', 'password7', 'student', TRUE),
|
||||
('Hank', '10000000008', 'password8', 'teacher', TRUE),
|
||||
('Ivy', '10000000009', 'password9', 'student', FALSE),
|
||||
('Jack', '10000000010', 'password10', 'teacher', TRUE);
|
||||
|
||||
|
||||
CREATE TABLE menu_items (
|
||||
|
|
|
|||
Reference in New Issue