七十九: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)
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM