pythonflaskresponse返回结果封装工具类(代码片段)

双份浓缩馥芮白 双份浓缩馥芮白     2023-03-26     255

关键词:

✨工具类介绍

封装后端获取到的数据

blueprints中可以直接通过return response(code=200, data=data, message=\'登陆成功\')形式返回给前端


✨简单封装工具类

from flask import jsonify


def response(code=200, message=\'\', data=None):
    """
    自定义返回结果的封装函数
    :param code: 状态码,默认为 200
    :param message: 提示信息,默认为空字符串
    :param data: 返回数据,默认为 None
    :return: Response 对象
    """
    response_data = 
        \'code\': code,
        \'message\': message,
        \'data\': data
    
    return jsonify(response_data)

如果传入data是ORM对象将会出现报错

TypeError: Object of type UserModel is not JSON serializable

根据报错信息,很明显是因为在返回响应结果的时候,UserModel类型的对象无法被jsonify()函数序列化成JSON格式。

为了解决这个问题,需要在返回响应结果之前,将UserModel对象转换为可以被序列化的类型,比如字典或者其他可序列化的对象。

例如,可以在查询到UserModel对象之后,将其转换为字典,然后再作为参数传递给response()函数:

user = UserModel.query.filter_by(email=email).first()
user_dict = user.__dict__  # 将对象转换为字典
del user_dict[\'_sa_instance_state\']  # 删除不必要的键
return response(code=200, data=user_dict, message=\'测试\')

这样就可以返回一个包含UserModel对象信息的JSON格式的响应结果了。


✨优化工具类

当然我们不能止步于此

我们对工具类进行进一步封装

使其能够处理此类问题

from flask import jsonify
from sqlalchemy.orm import DeclarativeMeta


def response(code=200, message=\'\', data=None):
    """
    自定义返回结果的封装函数
    :param code: 状态码,默认为 200
    :param message: 提示信息,默认为空字符串
    :param data: 返回数据,默认为 None
    :return: Response 对象
    """
    response_data = 
        \'code\': code,
        \'message\': message,
        \'data\': None
    
    try:
        response_data[\'data\'] = serialize(data)
        return jsonify(response_data)
    except SerializationError as e:
        response_data[\'code\'] = e.code
        response_data[\'message\'] = e.message
        return jsonify(response_data)


def serialize(obj):
    """
    将对象转换为可以序列化为JSON的数据类型
    :param obj: 待转换的对象
    :return: 转换后的数据类型
    """
    if obj is None:
        return None
    try:
        # 如果对象本身就是可以序列化为JSON的类型,则直接返回
        if isinstance(obj, (str, int, float, bool, list, tuple, dict)):
            return obj
        # 如果对象是ORM对象,则将其转换为字典并返回
        elif isinstance(obj.__class__, DeclarativeMeta):
            return c.name: getattr(obj, c.name) for c in obj.__table__.columns
        # 如果对象实现了__dict__方法,则将其转换为字典并返回
        elif hasattr(obj, \'__dict__\'):
            return obj.__dict__
        # 如果对象是其他类型,则抛出异常
        else:
            raise SerializationError(code=500, message=\'Cannot serialize object\')
    except Exception as e:
        raise SerializationError(code=500, message=str(e))


class SerializationError(Exception):
    """
    自定义的异常类,用于处理序列化错误
    """
    def __init__(self, code, message):
        self.code = code
        self.message = message

⭐转载请注明出处

本文作者:双份浓缩馥芮白

原文链接:https://www.cnblogs.com/Flat-White/p/17259508.html

版权所有,如需转载请注明出处。

java封装公共result结果返回类(代码片段)

...用Java开发接口请求中,我们需要对请求进行进行统一返回值,这时候我们自己封装一个统一的Result返回类,下面就介绍下我用的这种的这个类当然,也可以使用第三方库封装的Result结果返回类,根据个人喜好... 查看详情

java返回分页结果集的封装

packagecom.leyou.common;importjava.util.List;publicclassPageResult<T>{privatelongtotal;//总条数privateIntegertotalPage;//总页数privateList<T>list;publicPageResult(){}publicPageResult(longtotal,L 查看详情

springboot统一结果封装(代码片段)

ResultVo,返回结果对象@DatapublicclassResultVo<T>privateIntegercode;privateStringmessage;privateTdata;ResultVoUtil,封装返回结果publicclassResultVoUtilpublicstatic<T>ResultVo<T>sucess(Tdata)Re 查看详情

python编程封装函数根据输入参数计算结果返回(代码片段)

...、第一个数据行列索引、第二个数据行列索引和运算符。返回计算结果如果没有传入文件路径,随机生成10*10的值的范围在[6,6 查看详情

python编程封装函数根据输入参数计算结果返回(代码片段)

...、第一个数据行列索引、第二个数据行列索引和运算符。返回计算结果如果没有传入文件路径,随机生成10*10的值的范围在[6,6 查看详情

java对jdbc操作结果简单的映射封装

1.对jdbc做一个简单的封装,select可以返回一个javabean对象,而不是resultset。主要用了反射。这是我之前写的代码,做了简单的修改。  实现功能:a.对数据库的基本操作增删改查       b.对查询的单条记录返回一个指定... 查看详情

java中封装的jar,方法能够正常的调用,但是调用返回都没结果。

...就行了了。追问晕死~~我早就引用了。就是调用没有结果返回。追答不知道,你说的不详细了追问百度聊天、 参考技术B详细一些啊~~~追问封装的jar能够正常的用,就是没有值的返回。也就是传进去的参数没用。 参考技术C你的fie... 查看详情

java封装http返回结果类(代码片段)

文章目录封装类如下HTTP状态码枚举类通用的结果返回类测试一下封装类如下HTTP状态码枚举类packagecom.yyl.model.common.enums;publicenumAppHttpCodeEnum//成功段固定为200SUCCESS(200,"操作成功"),//登录段1~50NEED_LOGIN(1,"需要登录后操作")... 查看详情

封装类

<?phpclassDBDA{public$host="localhost";public$uid="root";public$pwd="123";public$dbname="mydb";/***给一个sql语句,返回执行的结果*@paramstring$sql用户指定的sql语句*@paramint$type用户给的语句类型,0代表增删改,1代表查询*@return返回查询的结果,如果是 查看详情

封装方法

<?phpclassDBDA{public$host="localhost";public$uid="root";public$pwd="123";public$dbname="mydb";/***给一个sql语句,返回执行的结果*@paramstring$sql用户指定的sql语句*@paramint$type用户给的语句类型,0代表增删改,1代表查询*@return返回查询的结果,如果是 查看详情

封装ajaxresult,返回后台对象(代码片段)

1.AjaxResult一般使用success/msg即可,但有时需求需要返回后台对象时,需要进行如下操作/***返回结果*/publicclassAjaxResultpublicstaticvoidmain(String[]args)//封装AjaxResult--返回后台数据AjaxResult.me().setSuccess(true).setMsg("恭喜你操作成功").setObje 查看详情

mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?

...射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。 查看详情

mybatis是如何将sql执行结果封装为目标对象并返回的?有哪些映射形式

...过反射创建对象,同时使用反射给对象的属性逐一赋值并返回,那些找不到映射关系的属性,是无法完成赋值的。参考技术A是写一个resultmap然后指明字段和属性映射关系就行 参考技术Busername=#1,password=#2whereid=#0这些代码写的有问... 查看详情

使用mybatis写一个验证方法时,mysql数据库查询结果返回null,mybatis无法将其封装为boolean类型,怎么办?

...怎样用mybatis配好这个方法?两种方法,第一种,改你的返回值,通过integer类型判断,再返回布尔值,第二种,试下返回Boolean类,判断Null就是false参考技术A返回0或者1,会自动转为boolean类型 查看详情

数据库扩展封装类

<?phpclassAAA{public$host="localhost";public$uid="root";public$pwd="123";public$dbname="housedb";/***给一个sql语句,返回执行的结果*@paramstring$sql用户指定的sql语句*@paramint$type用户给的语句类型,0代表增删改,1代表查询*@return返回查询的结果,如 查看详情

二次封装函数(代码片段)

...实现函数partialUsingArguments,调用之后满足如下条件:1、返回一个函数result2、调用result之后,返回的结果与调用函数fn的结果一致3、fn的调用参数为partialUsingArguments的第一个参数之后的全部参数以及result的调用参数代码1functionparti... 查看详情

项目封装:统一结果,统一异常,统一日志(代码片段)

   统一结果返回目前的前后端开发大部分数据的传输格式都是json,因此定义一个统一规范的数据格式有利于前后端的交互与UI的展示。统一结果的一般形式是否响应成功;响应状态码;状态码描述;响应数据其他标识符结... 查看详情

mybatis使用map封装查询的结果

...个查询写一个Entity类,这时Map开始发挥它的功效。对于要返回“学号,班级,姓名”结果的查询,可以这样写Mapper:<selectid="selectStudent">  selects.codeassNo,s.nameassName,c.nameascName  fromxStudents,xClassc &n 查看详情