Python:改造flask接口服务提供统一格式的返回数据

简介: Python:改造flask接口服务提供统一格式的返回数据

Flask视图函数默认是不能返回list对象和None的,如果返回数据不对,就会抛出异常


TypeError: The view function did not return a valid response. 
The return type must be a string, dict, tuple, Response instance, or WSGI callable, 
but it was a JsonResponse.

以下将Flask改造为视图函数返回支持list、dict、None


json_flask.py


# -*- coding: utf-8 -*-
from flask import Flask, jsonify
from json_response import JsonResponse
class JsonFlask(Flask):
    def make_response(self, rv):
        """视图函数可以直接返回: list、dict、None"""
        if rv is None or isinstance(rv, (list, dict)):
            rv = JsonResponse.success(rv)
        if isinstance(rv, JsonResponse):
            rv = jsonify(rv.to_dict())
        return super().make_response(rv)

接口统一的返回格式 json_response.py


# -*- coding: utf-8 -*-
class JsonResponse(object):
    """
    统一的json返回格式
    """
    def __init__(self, data, code, msg):
        self.data = data
        self.code = code
        self.msg = msg
    @classmethod
    def success(cls, data=None, code=0, msg='success'):
        return cls(data, code, msg)
    @classmethod
    def error(cls, data=None, code=-1, msg='error'):
        return cls(data, code, msg)
    def to_dict(self):
        return {
            "code": self.code,
            "msg": self.msg,
            "data": self.data
        }

使用改造后的JsonFlask对象


# -*- coding: utf-8 -*-
from flask import Flask
from flask_cors import CORS
from json_flask import JsonFlask
from json_response import JsonResponse
# app = Flask(__name__)
app = JsonFlask(__name__)
CORS(app, supports_credentials=True)
@app.route("/")
def index():
    return ['Tom', 'Jack']
@app.errorhandler(Exception)
def error_handler(e):
    """
    全局异常捕获,也相当于一个视图函数
    """
    return JsonResponse.error(msg=str(e))
if __name__ == '__main__':
    app.run(port=5001)

访问接口返回的数据


{
    "code": 0,
    "data": [
        "Tom",
        "Jack"
    ],
    "msg": "success"
}
相关文章
|
22天前
|
API 数据库 数据安全/隐私保护
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】Django REST framework (DRF) 是用于构建Web API的强力工具,尤其适合Django应用。本文深入讨论DRF面试常见问题,包括视图、序列化、路由、权限控制、分页过滤排序及错误处理。同时,强调了易错点如序列化器验证、权限认证配置、API版本管理、性能优化和响应格式统一,并提供实战代码示例。了解这些知识点有助于在Python面试中展现优秀的Web服务开发能力。
28 1
|
6天前
|
开发框架 安全 搜索推荐
如何使用vscode启动Flask并实现无公网IP远程访问内网服务
如何使用vscode启动Flask并实现无公网IP远程访问内网服务
19 0
|
6天前
|
监控 PHP Python
1688快速获取整店铺列表 采集接口php Python
在电子商务的浪潮中,1688平台作为中国领先的批发交易平台,为广大商家提供了一个展示和销售商品的广阔舞台;然而,要在众多店铺中脱颖而出,快速获取商品列表并进行有效营销是关键。
|
7天前
|
存储 监控 Python
python 日期字符串转换为指定格式的日期
python 日期字符串转换为指定格式的日期
15 3
|
7天前
|
JSON 安全 前端开发
解析FormData格式数据:Python实践指南
解析FormData格式数据:Python实践指南
13 1
|
13天前
|
数据挖掘 数据处理 Python
【亮剑】介绍了Python中以表格格式打印列表的三种方法
【4月更文挑战第30天】本文介绍了Python中以表格格式打印列表的三种方法:1) 使用字符串格式化,适用于简单场景;2) 使用prettytable库,适合需要更多格式化选项的情况;3) 使用pandas库,适用于处理大量数据和复杂分析。根据需求选择合适的方法来展示数据。
|
22天前
|
SQL 中间件 API
Flask框架在Python面试中的应用与实战
【4月更文挑战第18天】**Flask是Python的轻量级Web框架,以其简洁API和强大扩展性受欢迎。本文深入探讨了面试中关于Flask的常见问题,包括路由、Jinja2模板、数据库操作、中间件和错误处理。同时,提到了易错点,如路由冲突、模板安全、SQL注入,以及请求上下文管理。通过实例代码展示了如何创建和管理数据库、使用表单以及处理请求。掌握这些知识将有助于在面试中展现Flask技能。**
18 1
Flask框架在Python面试中的应用与实战
|
23天前
|
存储 JSON 数据安全/隐私保护
Flask Python:如何获取不同请求方式的参数
Flask Python:如何获取不同请求方式的参数
|
23天前
|
数据安全/隐私保护 Python
Python Flask-Mail实现邮件发送
Python Flask-Mail实现邮件发送
|
25天前
|
监控 数据可视化 NoSQL
Python基于Flask的高校舆情分析,舆情监控可视化系统
Python基于Flask的高校舆情分析,舆情监控可视化系统