基于Flask、Flasgger、marshmallow的开发调试

问题描述调试方法一调试方法二调试方法三

问题描述

现在有一个传入传出为json格式文件的,Flask-restful开发的程序,需要解决如何调试的问题。

#!/usr/bin/python3

# -*- coding: utf-8 -*-

# @Project : combine all libraries examples.py

# @File : RiGangTemplateTry.py

# @Time : 2024/1/4 8:43

from flask import Flask, request

from flask_restful import Api, Resource

from flasgger import Swagger

from marshmallow import Schema, fields, ValidationError

# 初始化 Flask 应用、API 和 Swagger

app = Flask(__name__)

api = Api(app)

swagger = Swagger(app)

# 校验输入数据

class AgeSchema(Schema):

name = fields.Str(required=True)

age = fields.Integer(required=True)

# 校验输出数据

class AgeStatSchema(Schema):

average_age = fields.Float()

max_age = fields.Integer()

min_age = fields.Integer()

class AgeStats(Resource):

def post(self):

"""

Upload JSON and Calculate Age Stats

---

consumes:

- application/json

parameters:

- in: body

name: body

schema:

id: AgeInput

type: array

items:

type: object

required:

- name

- age

properties:

name:

type: string

age:

type: integer

description: JSON array with names and ages

responses:

200:

description: Age statistics

schema:

id: AgeStats

properties:

average_age:

type: number

format: float

description: The average age of the submitted ages

max_age:

type: integer

description: The maximum age of the submitted ages

min_age:

type: integer

description: The minimum age of the submitted ages

"""

json_data = request.get_json()

# 校验 JSON 数据

try:

results = AgeSchema(many=True).load(json_data)

except ValidationError as err:

return err.messages, 400

# 计算平均年龄、最大年龄和最小年龄

ages = [person['age'] for person in results]

average_age = sum(ages) / len(ages)

max_age = max(ages)

min_age = min(ages)

# 序列化输出数据

stats_schema = AgeStatSchema()

return stats_schema.dump({

'average_age': average_age,

'max_age': max_age,

'min_age': min_age

}), 200

class UserSchema(Schema):

username = fields.Str(required=True)

email = fields.Email(required=True)

class User(Resource):

def get(self, username):

"""

Get User Endpoint

---

parameters:

- in: path

name: username

type: string

required: true

description: The username of the user

responses:

200:

description: The user information

schema:

id: UserResponse

properties:

username:

type: string

description: The username of the user

email:

type: string

description: The email of the user

examples:

application/json: { "username": "johndoe", "email": "john@example.com" }

"""

# 示例数据,实际应用中这里会是数据库查询等操作

user_data = {"username": username, "email": f"{username}@example.com"}

# 使用 Marshmallow Schema 校验和序列化数据

user_schema = UserSchema()

return user_schema.dump(user_data), 200

api.add_resource(User, '/users/')

api.add_resource(AgeStats, '/age_stats')

if __name__ == '__main__':

app.run(debug=True)

调试方法一

通过http://127.0.0.1:5000/apidocs/已经可以便捷的查看代码中的api数据。 但是在测试代码的时候仍然需要手动输入调试json数据在界面上

调试方法二

要使用您的Flask应用进行测试,您可以采用以下步骤:

确保您的环境已经安装了所有必需的库。如果还没有安装,您可以使用pip来安装它们:

pip install flask flask-restful flasgger marshmallow

保存并运行您的Flask应用。将您的脚本保存为一个.py文件,例如app.py,然后在命令行中运行它:

python app.py

准备您的测试数据。创建一个JSON文件data.json,包含您想要测试的数据,例如:

[

{"name": "Alice", "age": 30},

{"name": "Bob", "age": 25},

{"name": "Charlie", "age": 35}

]

使用curl命令或者Postman等工具发送请求。

使用curl发送POST请求:

curl -X POST -H "Content-Type: application/json" -d @data.json http://127.0.0.1:5000/age_stats

确保您的Flask应用正在运行,并且使用了data.json文件中的正确路径。

如果您更喜欢图形界面,可以使用Postman:

打开Postman。创建一个新的POST请求。在URL栏输入http://127.0.0.1:5000/age_stats。在Headers部分,添加一个新的条目。对于key填入Content-Type,对于value填入application/json。在Body部分,选择raw,然后从下拉菜单中选择JSON。将data.json文件中的数据复制并粘贴到raw文本区域中。点击Send。

观察响应。无论是curl还是Postman,您都应该收到一个包含平均年龄、最大年龄和最小年龄的JSON响应。 调试。如果测试没有按预期进行,您可以在Flask应用中添加print语句或使用Python的pdb模块来调试。您还可以检查Postman或终端中的错误信息来帮助诊断问题。

如果您遇到400 Bad Request错误,这通常意味着您的输入数据不符合AgeSchema的要求。在这种情况下,检查您的JSON数据确保每个对象都有name和age字段,并且age是一个整数。

调试方法三

写一个调试的脚本,使用Request调试

#!/usr/bin/python3

# -*- coding: utf-8 -*-

# @Project : combine all libraries examples.py

# @File : TestRiGangTemplateTry.py

# @Time : 2024/1/4 9:15

import requests

import json

# 设置您的API端点

url = 'http://127.0.0.1:5000/age_stats'

# 准备您的测试数据

data = [

{"name": "Alice", "age": 30},

{"name": "Bob", "age": 25},

{"name": "Charlie", "age": 35}

]

# 将数据转换为JSON格式

json_data = json.dumps(data)

# 发送POST请求

response = requests.post(url, data=json_data, headers={'Content-Type': 'application/json'})

# 打印响应

print('Status Code:', response.status_code)

print('Response Body:', response.text)

文章链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: