当前位置: 首页 > news >正文

简单的 ​Flask​ 后端应用

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. 导入必要的模块

from flask import Flask, request, jsonify, session
import os
  • ​**Flask**​:Flask 框架的核心类,用于创建 Web 应用。
  • ​**request**​:用于处理 HTTP 请求(如获取 POST 数据)。
  • ​**jsonify**​:用于返回 JSON 格式的响应(虽然代码中没有直接使用)。
  • ​**session**​:用于管理用户会话(Session),存储登录状态等信息。
  • ​**os**​:用于生成安全的随机密钥。

2. 创建 Flask 应用

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. 模拟用户数据

users = {'123': 'admin','admin': 'admin'
}
  • 这是一个简单的字典,存储用户名和密码(实际项目中应该使用数据库)。
  • 示例用户:
    • 用户名 123,密码 admin
    • 用户名 admin,密码 admin

​4. 登录接口 /login

@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  # 登录成功,设置 Sessionreturn '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 数据中提取 username 和 password
  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 请求:

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. 密码加密存储​(如 bcrypt 或 hashlib)。
  3. 添加注销功能​(session.pop('logged_in', None))。
  4. 返回 JSON 格式的响应​(如 jsonify({"message": "Login successful"}))。

总结

  • 这是一个简单的 ​Flask 登录 API,使用 ​Session​ 管理登录状态。
  • 适用于小型应用或学习 Flask 的 Session 机制。
  • 实际项目中需要更安全的用户管理和数据库支持。

 

http://www.lryc.cn/news/573050.html

相关文章:

  • FPGA基础 -- Verilog 的属性(Attributes)
  • HTTP Server
  • 解决uni-app发布微信小程序主包大小限制为<2M的问题
  • C/C++ 高频八股文面试题1000题(一)
  • DB面试题
  • C++基础算法————并查集
  • Python中布尔值在函数中的巧妙运用
  • 【Python进阶系列】第9篇:聊聊 Python 中常用的第三方库
  • docker基础入门于应用的实践
  • 让Agent的应用价值增长
  • mysql 执行计划 explain命令 详解
  • Agent轻松通-P3:分析我们的Agent
  • 详解Redis的内存淘汰策略
  • HCIP-华为VRP系统基础
  • Linux——库文件生成和使用
  • 软件架构的发展历程——从早期的单体架构到如今的云原生与智能架构
  • 初学python的我开始Leetcode题10-2
  • RPC常见问题回答
  • 【Go语言基础】对齐边界与内存填充
  • HTTP 请求方法与状态码
  • 深入解析:如何实时获取Socket接收缓冲区的数据量
  • Cesium、ThreeWebGL详解(二)渲染引擎向GPU传数据、性能优化、引擎对比
  • C++ 学习笔记精要(二)
  • mysql server层做了什么
  • Spring 的IoC 和 AOP
  • 博士,超28岁,出局!
  • 算法第38天|322.零钱兑换\139. 单词拆分
  • moments_object_model_3d这么理解
  • 信安实验室CTF writeup
  • 【Python进阶系列】第10篇:Python 项目的结构设计与目录规范 —— 从脚本到模块,从混乱到整洁