接上一篇的代码和数据

对于复杂结构的数据如果只是定义单一结构的话返回的数据就没意义了,此时定义的数据结构需精确到所有数据的每一个字段
有时候要返回的数据结构中,会有比较复杂的数据结构,证实后可以使用一些特殊字段来实现,如果某个字段的值是list,则使用fields.List、如果某个字段的值是字典,则使用fields.Nested

from flask import Flask
import config
from exts import db
from models import User, Article, Tag
from flask_restful import Api, Resource, fields, marshal_with app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
api = Api(app) class ArticleView(Resource):
resource_fields = {
'title': fields.String,
'content': fields.String,
'author': fields.String,
'tags': fields.String
} @marshal_with(resource_fields)
def get(self, article_id):
article = Article.query.get(article_id)
return article api.add_resource(ArticleView, '/article/<article_id>/', endpoint='article')

使用fields.List和fields.Nested对指定数据嵌套

class ArticleView(Resource):
# 定义要返回的数据结构
resource_fields = {
'title': fields.String, # article.title
'content': fields.String,
'author': fields.Nested({ # article.author
'username': fields.String, # article.author.username
'email': fields.String # article.author.email
}),
'tags': fields.List( # article.tags的list
fields.Nested({ # article.tags[n]
'id': fields.Integer, # # article.tags[n].id
'name': fields.String # # article.tags[n].name
})
)
}

重命名属性
很多时候面向用户的字段名称是不同于代码中的字段名的,使用attribute可以设置这种修改字段名后的映射,如:'article_title': fields.String(attribute='title'), 返回的article_title实际上是article.title字段的值

class ArticleView(Resource):
# 定义要返回的数据结构
resource_fields = {
'article_title': fields.String(attribute='title'), # article.title
'content': fields.String,
'author': fields.Nested({ # article.author
'username': fields.String, # article.author.username
'email': fields.String # article.author.email
}),
'tags': fields.List( # article.tags的list
fields.Nested({ # article.tags[n]
'id': fields.Integer, # # article.tags[n].id
'name': fields.String # # article.tags[n].name
})
),
}

默认值:
在返回一些字段的时候,有时候没有值,那么可以指定fields的时候指定一个默认值,如:'count': fields.Integer(default=30)

class ArticleView(Resource):
# 定义要返回的数据结构
resource_fields = {
'article_title': fields.String(attribute='title'), # article.title
'content': fields.String,
'author': fields.Nested({ # article.author
'username': fields.String, # article.author.username
'email': fields.String # article.author.email
}),
'tags': fields.List( # article.tags的list
fields.Nested({ # article.tags[n]
'id': fields.Integer, # # article.tags[n].id
'name': fields.String # # article.tags[n].name
})
),
'count': fields.Integer(default=30)
}

七十九:flask.Restful之flask-Restful标准化返回参数示例的更多相关文章

  1. 第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装

    第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装 xadmin介绍 xadmin是基于Django的admin开发的更完善的后台管理系统,页面基于Bootstr ...

  2. “全栈2019”Java第七十九章:类中可以嵌套接口吗?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. 七十八:flask.Restful之flask-Restful标准化返回参数以及准备数据

    对于一个视图函数,可以指定好数据结构和字段用于返回,以后使用ORM模型或者自定义的模型的时候,它会自动获取模型中相应的字段,生成json数据,然后再返回给前端,这需要导入flask_restful.m ...

  4. (七十九)c#Winform自定义控件-导航菜单

    前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kwwwvagaa/NetWinformControl 码云:ht ...

  5. 七十九:flask.Restful之flask-Restful蓝图与渲染模板

    1.flask-Restful与蓝图结合使用如果要在蓝图中使用flask-Restful,那么在创建Api对象的时候,就不应该使用app,而是蓝图,如果有多个蓝图,则需在每一个蓝图里面创建一个Api对 ...

  6. 第七十九,CSS3背景渐变效果

    CSS3背景渐变效果 学习要点: 1.线性渐变 2.径向渐变 本章主要探讨HTML5中CSS3背景渐变功能,主要有两种渐变方式:线性渐变和径向 (放射性)渐变. 一.线性渐变 linear-gradi ...

  7. salesforce零基础学习(七十九)简单排序浅谈 篇一

    我们在程序中经常需要对数据列表进行排序,有时候使用SOQL的order by 不一定能完全符合需求,需要对数据进行排序,排序可以有多种方式,不同的方式针对不同的场景.篇一只是简单的描述一下选择排序,插 ...

  8. (七十九)MapKit的基本使用

    MapKit是苹果公司开发的用于显示地图和实现定位.导航的地图框架. MapKit View可以通过storyboard.xib创建,也可以通过代码直接创建. 需要注意的是,通过storyboard和 ...

  9. Java开发笔记(七十九)利用反射技术操作私有属性

    早在介绍多态的时候,曾经提到公鸡实例的性别属性可能被篡改为雌性,不过面向对象的三大特性包含了封装.继承和多态,只要把性别属性设置为private私有级别,也不提供setSex这样的性别修改方法,那么性 ...

随机推荐

  1. STM32/EMC/ZILIAO

    https://www.st.com/content/ccc/resource/technical/document/application_note/a2/9c/07/d9/2a/b2/47/dc/ ...

  2. Django REST Framework(DRF)_第四篇

    DRF分页(总共三种) PageNumberPagination(指定第n页,每页显示n条数据) 说明 既然要用人家的那么我们就先来看下源码,这个分页类源码中举例通过参数指定第几页和每页显示的数据:h ...

  3. mysql.sock丢失问题

    执行下面命令即可 /usr/local/bin/mysqld_safe 摘录于:https://blog.csdn.net/qq_20008173/article/details/87280834

  4. Python main()函数解析

    __main__ — Top-level script environment '__main__'是顶级代码执行的作用域的名字. 当一个模块从标准input, 一个脚本文件,或一个交互命令read读 ...

  5. 方正科技win7重装系统

    1.制作装机版U盘启动盘 老毛桃装机版制作启动U盘教程 http://www.laomaotao.org/jiaocheng/92/upqdzz.html 2.下载系统镜像文件保存至U盘启动盘 MSD ...

  6. ThinkPHP胜出Laravel 近4倍,主流框架性能测试

    主流PHP框架性能非权威测试 作为一个PHP开发者,而且是初创企业团队的技术开发者,选择开发框架是个很艰难的事情. 用ThinkPHP的话,招聘一个刚从培训机构出来的开发者就可以上手了,但是性能和后期 ...

  7. Oracle之:Function :dateToNumber()

    create or replace function dateToNumber(i_date in date) return number is result number ; begin resul ...

  8. tomcat下载与安装

    https://www.cnblogs.com/limn/p/9358657.html

  9. Linux top常用操作

    是否显示task和cpu行:t 是否显示内存信息行:m 切换信息区域单位:E 切换任务区域单位:e 显示各个CPU单独的数据: 按某列排序: M(内存) P(CPU) N(PID) T(TIME+) ...

  10. Eureka 服务注册列表显示IP问题研究

    在研究Spring Cloud的过程中,本地搭建好Eureka注册中心之后,发现Eureka服务页面显示的服务是机器名:端口的格式,并不是IP+端口的形式. 如下图: 具体搭建过程我就不再贴代码了,参 ...