• 七十九: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)
    }
  • 相关阅读:
    Eclipse建立Java工程中的三个JRE选项的区别(Use an execution environment JRE,Use a project specific JRE,Use default JRE)
    Maven项目报错:Missing artifact****和ArtifactDescriptorException: Failed to read artifact descriptor for***和Cannot change version of project facet Dynamic web module to 2.5
    使用jdk的keytool 生成CA证书的方法
    Linux shell逐行读取文件的方法
    ArrayList的实现原理
    时间复杂度总结
    RPC的原理总结
    hashcode和equals方法的区别和联系
    消息队列的应用场景总结
    Java中IO流中的装饰设计模式(BufferReader的原理)
  • 原文地址:https://www.cnblogs.com/zhongyehai/p/11877169.html
Copyright © 2020-2023  润新知