python
from flask import Flask, request, jsonify, session
import os
app = Flask(__name__)
app.secret_key = os.urandom(24)
users = {
'123': 'admin',
'admin': 'admin'
}
# 登录接口
@app.route('/login', methods=['POST'])
def login():
data = request.get_json()
username = data.get('username')
password = data.get('password')
if username in users and users[username] == password:
session['logged_in'] = True
return 'Login successful', 200
else:
return 'Login failed', 401
这段代码是一个简单的 Flask 后端应用,实现了一个用户登录功能,并使用 Session 来管理用户登录状态。以下是代码的详细解释:
1. 导入必要的模块
python
from flask import Flask, request, jsonify, session
import os
- **
Flask
**:Flask 框架的核心类,用于创建 Web 应用。 - **
request
**:用于处理 HTTP 请求(如获取 POST 数据)。 - **
jsonify
**:用于返回 JSON 格式的响应(虽然代码中没有直接使用)。 - **
session
**:用于管理用户会话(Session),存储登录状态等信息。 - **
os
**:用于生成安全的随机密钥。
2. 创建 Flask 应用
python
app = Flask(__name__)
app.secret_key = os.urandom(24) # 设置一个密钥,用于加密 session 数据
- **
app = Flask(__name__)
**:创建一个 Flask 应用实例。 - **
app.secret_key = os.urandom(24)
**:- **
secret_key
** 是 Flask 用来加密 Session 数据的密钥。 - **
os.urandom(24)
** 生成一个 24 字节的随机密钥,确保 Session 数据的安全性。
- **
3. 模拟用户数据
python
users = {
'123': 'admin',
'admin': 'admin'
}
- 这是一个简单的字典,存储用户名和密码(实际项目中应该使用数据库)。
- 示例用户:
- 用户名
123
,密码admin
- 用户名
admin
,密码admin
- 用户名
4. 登录接口 /login
python
@app.route('/login', methods=['POST'])
def login():
data = request.get_json() # 获取 POST 请求的 JSON 数据
username = data.get('username') # 获取用户名
password = data.get('password') # 获取密码
if username in users and users[username] == password:
session['logged_in'] = True # 登录成功,设置 Session
return 'Login successful', 200 # 返回成功消息
else:
return 'Login failed', 401 # 返回失败消息
功能解析
- **
@app.route('/login', methods=['POST'])
**:- 定义了一个 POST 请求的路由
/login
,用于处理登录请求。
- 定义了一个 POST 请求的路由
- **
data = request.get_json()
**:- 获取客户端发送的 JSON 数据 (如
{"username": "hami", "password": "admin"}
)。
- 获取客户端发送的 JSON 数据 (如
- **
username = data.get('username')
和 password = data.get('password')
**:- 从 JSON 数据中提取
username
和password
。
- 从 JSON 数据中提取
- 验证用户
- 检查
username
是否在users
字典中,并且密码是否匹配。 - 如果匹配:
- **
session['logged_in'] = True
**:设置 Session,标记用户已登录。 - **
return 'Login successful', 200
**:返回成功消息(HTTP 200)。
- **
- 如果不匹配:
- **
return 'Login failed', 401
**:返回失败消息(HTTP 401 未授权)。
- **
- 检查
5. Session 的作用
- **
session['logged_in'] = True
**:- 在用户登录成功后,Flask 会存储一个加密的 Session Cookie 在客户端(浏览器)。
- 后续请求会自动携带这个 Cookie,服务器可以检查
session['logged_in']
来判断用户是否登录。
- **
secret_key
** 的作用:- 确保 Session 数据不会被篡改(因为数据是加密的)。
6. 如何测试这个 API?
可以使用 Postman 或 curl 发送 POST 请求:
python
curl -X POST http://127.0.0.1:5000/login \
-H "Content-Type: application/json" \
-d '{"username": "hami", "password": "admin"}'
成功响应:
Login successful
失败响应:
Login failed
7. 可能的改进
- 使用数据库存储用户(如 SQLite、MySQL)。
- 密码加密存储 (如
bcrypt
或hashlib
)。 - 添加注销功能 (
session.pop('logged_in', None)
)。 - 返回 JSON 格式的响应 (如
jsonify({"message": "Login successful"})
)。
总结
- 这是一个简单的 Flask 登录 API ,使用 Session 管理登录状态。
- 适用于小型应用或学习 Flask 的 Session 机制。
- 实际项目中需要更安全的用户管理和数据库支持。