文章目录
- 代码
- 解释
代码
# flask_http_printer.py
from flask import Flask, request, jsonify
import json
app = Flask(__name__)
@app.route('/printinfo', methods=['POST'])
def print_info():
# 分隔符
separator = "-" * 60
# 获取请求头
headers = request.headers
# 获取 JSON body
body = request.get_json()
# 打印分隔符
print(separator)
# 美化打印请求头
print("Headers:")
print(json.dumps(dict(headers), indent=4, ensure_ascii=False))
# 美化打印 JSON body
print("Body:")
print(json.dumps(body, indent=4, ensure_ascii=False))
# 再次打印分隔符以结束本次打印
print(separator)
return jsonify({"status": "信息已打印"}), 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=27751, debug=True)
解释
这段 Flask 应用代码定义了一个简单的 HTTP POST 接口,其主要功能是接收 JSON 格式的数据并将相关信息打印出来,用于调试或监控目的。下面逐部分解释代码:
-
导入必要的库:
from flask import Flask, request, jsonify
: 导入 Flask 框架的基本组成部分(没有安装flask需要先安装:pip install flask
),Flask
用于创建应用,request
用于处理传入的请求数据,jsonify
用于返回 JSON 响应。import json
: 导入 Python 的 json 库,用于处理 JSON 数据的美化打印。
-
创建 Flask 应用实例:
app = Flask(__name__)
: 创建一个 Flask 应用实例。
-
定义路由和视图函数:
@app.route('/printinfo', methods=['POST'])
: 通过装饰器定义一个路由/printinfo
,仅接受 POST 方法的请求。def print_info()
: 定义处理请求的视图函数。
-
在视图函数中打印信息:
separator = "-" * 60
: 定义一个分隔符,由 60 个连字符组成,用于在控制台输出中分隔不同的请求信息。headers = request.headers
: 获取请求的所有头部信息。body = request.get_json()
: 尝试解析请求的 JSON 主体内容。
-
美化并打印获取的数据:
- 打印分隔符,隔开前一个请求的打印结果。
- 使用
json.dumps()
方法以 JSON 格式美化并打印请求头,其中indent=4
表示每个级别缩进四个空格,ensure_ascii=False
允许直接打印非 ASCII 字符(例如中文)。 - 以同样的方式美化并打印请求体。
- 再次打印分隔符表示本次请求的结束。
-
返回响应:
return jsonify({"status": "信息已打印"}), 200
: 返回一个 JSON 格式的响应,包含状态信息,HTTP 状态码为 200,表示请求已成功处理。
-
运行应用:
if __name__ == '__main__'
: 确保只有在直接运行这个脚本时才会执行app.run()
。app.run(host='0.0.0.0', port=27751, debug=True)
: 启动应用,监听所有可用的 IP 地址 (0.0.0.0
) 上的 27751 端口。开启调试模式,以便于开发和调试过程中实时重载及提供调试信息。
-
支持跨域请求:
- 如果想要接口支持跨域请求,需要安装 Flask-CORS:
- 使用 pip 安装 Flask-CORS:
pip install flask-cors
- 修改 Flask 应用代码以引入和使用 Flask-CORS: 更新你的 app.py 文件来引入并使用 Flask-CORS 扩展:
from flask_cors import CORS # 导入 CORS CORS(app) # 启用 CORS 支持,对所有域名开放
- 使用 pip 安装 Flask-CORS:
- 如果想要接口支持跨域请求,需要安装 Flask-CORS:
这个代码用于开发和测试阶段,帮助开发者查看和验证发送到 /printinfo
端点的请求内容。调试模式开启时不应用于生产环境,因为它会显示敏感的错误信息。