简单的 Flask 后端应用

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  # 返回失败消息

功能解析

  1. **@app.route('/login', methods=['POST'])**:
    • 定义了一个 POST 请求的路由 /login,用于处理登录请求。
  2. **data = request.get_json()**:
    • 获取客户端发送的 JSON 数据 (如 {"username": "hami", "password": "admin"})。
  3. **username = data.get('username')​ 和 ​ password = data.get('password')**:
    • 从 JSON 数据中提取 usernamepassword
  4. 验证用户
    • 检查 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. 可能的改进

  1. 使用数据库存储用户(如 SQLite、MySQL)。
  2. 密码加密存储 (如 bcrypthashlib)。
  3. 添加注销功能session.pop('logged_in', None))。
  4. 返回 JSON 格式的响应 (如 jsonify({"message": "Login successful"}))。

总结

  • 这是一个简单的 Flask 登录 API ,使用 Session 管理登录状态。
  • 适用于小型应用或学习 Flask 的 Session 机制。
  • 实际项目中需要更安全的用户管理和数据库支持。
相关推荐
Bs_MoneyMagnet3 小时前
基于springboot+vue的心理咨询预约与随访平台的设计与实现 源码+文档
vue.js·spring boot·后端·spring·毕业设计·旅游·计算机毕业设计
OKkankan4 小时前
LangChain 能力详解!:输出解析、RAG、向量数据库与 Retriever 检索器
数据结构·python·langchain·ai应用
IT_陈寒4 小时前
Vue的响应式更新把我坑惨了,原来问题出在这
前端·人工智能·后端
山哥ol5 小时前
【Geany 环境配置与中文乱码解决参考】
python
陌シ未央ゞ5 小时前
基于BM25算法和RRF实现的混合索引(java版)
人工智能·spring boot·后端·算法
第五页的你5 小时前
SpringBoot基础设施配置(Redis序列化,JJWT新版)
后端
吃饱了得干活5 小时前
RabbitMQ 原理解析(下):存储、集群与可靠投递
后端·rabbitmq
会飞锦鲤5 小时前
基于 Mask R-CNN 的药片缺陷检测系统
人工智能·pytorch·python·神经网络·resnet-50
默 语5 小时前
Java新手入门:从零开始安装JDK并配置环境变量
java·开发语言·python·mysql·group by·1024程序员节·数据去重
SelectDB5 小时前
某头部保险公司基于 SelectDB 的统一 OLAP 架构实践
后端