• 七十九:flask.Restful之flask-Restful标准化返回参数示例


    接上一篇的代码和数据

    对于复杂结构的数据如果只是定义单一结构的话返回的数据就没意义了,此时定义的数据结构需精确到所有数据的每一个字段
    有时候要返回的数据结构中,会有比较复杂的数据结构,证实后可以使用一些特殊字段来实现,如果某个字段的值是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)
    }
  • 相关阅读:
    JAVA入门[7]-Mybatis generator(MBG)自动生成mybatis代码
    JAVA入门[6]-Mybatis简单示例
    JAVA入门[5]-初步搭建SpringMVC站点
    欠阿里云一分钱,会是什么样的后果
    IIS虚拟目录挂载文件服务器目录
    “Validation failed for one or more entities”异常的解决办法
    idapython import 'site' failed
    .Net Core 2.0 EntityFrameworkCore CodeFirst入门教程
    MVC添加Area出现“到多个与名为“Home”的控制器匹配的类型的解决方法”
    VS 2017 Git failed with a fatal error的解决办法
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/11877169.html
Copyright © 2020-2023  润新知