【PythonWeb开发】Flask-RESTful字段格式化

news/2024/10/31 14:32:56/

        字段格式化的意思就是对api接口返回的响应做出规范。

        具体的思想是,先定义一个格式化输出样板fields,然后在类视图中的视图方法上加marshal_with装饰器使得格式化生效。这样做的有什么特别的用处吗?特性:

  • 显示出我们设计的数据结构

  • 默认返回的数据如果不在预定义的结构fields中,数据会被自动过滤

  • 如果返回的数据在预定义结构fields中存在,数据才会正常返回

  • 如果返回的数据字段比预定义结构fields中定义的字段要少,那么缺少的字段会呈现出一个默认值

一、定义字段输出格式

        使用字典来进行定义,一般API接口的返回结果都是一个JSON对象。通常使用的数据类型是:String、Integer。使用字段格式化必须要导入from flask_restful import fields

python">from flask_restful import fields# 格式化字段
user_fields = {'msg': fields.String,'status': fields.Integer,'data': fields.String(attribute='private_data'),'default_data': fields.String(default='1')
}

二、视图类中使用规定格式输出

将定义好的格式,通过装饰器进行使用。

@marshal_with(需要返回的数据格式)

return {返回字典}

(1)简单使用

python">class Users(Resource):@marshal_with(user_fields)def get(self):return {'msg': 'failed','data': '没有数据','age': '22','private_data': '表中数据'}

(2)嵌套字典

        return返回的一般是一个字典,如果我在字典中的某个字段也是字典,那么就需要用到Nested方法来进行字典嵌套字典。这样做的目的是对子一级的数据也做规范化响应输出。

python"># 子一级,格式化字段
usermodel_fields = {'id': fields.Integer,'name': fields.String,
}# 返回的格式化字段
user_fields = {'msg': fields.String(default='ok'),'status': fields.Integer(default=1),'data': fields.Nested(usermodel_fields)  # 字典中嵌套字典,要用Nested()方法指明
}

(3)嵌套列表

        返回的字段结构允许嵌套列表,也就是字典中嵌套列表,列表里面还可以是字典。那么就需要用到List方法。目的是一样的,也是相对更深层的数据格式做规范。

python">usermodel_fields = {'id': fields.Integer,'name': fields.String
}user_fields = {'status': fields.String(default=1),'msg': fields.String,'data': fields.List(fields.Nested(usermodel_fields))
}

(4)嵌套URL

        在返回的响应字段中,带有url字段,这种做法也经常使用,用在做api的跳转。一般是根据提供的url和唯一标识进行数据操作。

python">usermodel_fields = {'id': fields.Integer,'name': fields.String,# 'id'是标识符,用来告诉这个url你想暴露显示哪一个路由'url': fields.Url('id', absolute=True)  # absolute是否显示绝对路径
}# 既然给了标识符'id',那么在路由中就需要指明
api.add_resource(User, '/user', endpoint='id')

http://www.ppmy.cn/news/1543357.html

相关文章

背包九讲——树形背包问题(有依赖的背包)

目录 树形背包问题 问题引入: 问题解读: 算法例题:10. 有依赖的背包问题 - AcWing题库 题目: 算法实现: 代码实现: 背包问题第七讲——树形背包问题(有依赖的背包) 背包问题是…

Docker学习笔记【从入门到精通】

目录 一、Docker是什么 二、Docker容器部署项目 三、Docker的核心特点 四、Docker的应用场景和使用方式 五、Docker安装部署 1.Docker引擎 2.Docker组成 (1)Docker Daemon (2)Rest接口 (3)Docker …

Dockerfile制作Oracle19c镜像

Dockerfile文件 cat > Dockerfile << EOF # 使用 Oracle Linux 8 作为基础镜像 FROM oraclelinux:8# 复制 Oracle 19c 安装包 COPY oracle-database-ee-19c-1.0-1.x86_64.rpm /tmp/# 安装 Oracle 19c 数据库和依赖 RUN yum localinstall -y /tmp/oracle-database-ee-…

C/C++内存和内存管理

一.C/C内存分布 首先来检测一下对于内存的分布知识是否理解通透了&#xff0c;请看下面代码和回答相关问题。 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "a…

【Linux】Kafka部署

1、部署 # 解压 [appuserlocalhost app]$ tar -zxvf kafka_2.13-3.0.0.tgz# 修改配置文件&#xff08;具体配置见下文&#xff09; [appuserlocalhost app]$ cd kafka_2.13-3.0.0 [appuserlocalhost kafka_2.13-3.0.0]$ vim config/server.properties # 在所有集群节点启动Kaf…

使用 Cursor 和 Devbox 快速开发并上线 Gin 项目

作为开发者&#xff0c;最让我们头疼的事情是什么&#xff1f;那必须是环境配置、版本控制以及各种部署配置等等繁琐的工作。 想象一下&#xff0c;如果你只需点击几下鼠标&#xff0c;就能拥有一个完全配置好的开发环境&#xff0c;支持从 Java 到 Python&#xff0c;从 Reac…

【Mac】Homebrew

1、Homebrew 简介 官网地址&#xff1a;https://brew.sh Homebrew 是一款Mac OS平台下的软件包管理工具&#xff0c;拥有安装、卸载、更新、查看、搜索等很多实用的功能。 Homebrew 主要有四个部分组成: brew、homebrew-core 、homebrew-bottles、homebrew-cask。 源说明br…

阿里面试:为什么MySQL不建议使用Delete删除数据?

MySQL有建议过不要使用他们家的DELETE吗&#xff1f;在MySQL 8.0的官方文档里没有找到不建议使用DELETE的文字。 DELETE VS NOT DELETE&#xff0c;这是由来已久的问题 时间回到2009的8月30号。大佬Ayende Rahien——也被称为Oren Eini&#xff0c;Hibernating Rhinos公司的C…