對於一個視圖函數,可以指定好數據結構和字段用於返回,以后使用ORM模型或者自定義的模型的時候,它會自動獲取模型中相應的字段,生成json數據,然后再返回給前端,這需要導入flask_restful.marshal_with裝飾器,並且需要寫一個字典,來指示要返回的字段名,以及該字段的數據類型
一、簡單示例:
一般情況下返回數據


在restful規范中,要求一旦定義好了返回參數,即使這個參數沒有值,也要返回,可以將此參數的值設為None返回


返回模型


二、數據准備:
項目代碼

import os
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@127.0.0.1:3306/test'
SQLALCHEMY_TRACK_MODIFICATIONS = False
SECRET_KEY = os.urandom(30)

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

from exts import db
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(50))
email = db.Column(db.String(50))
# 中間表
article_tag_table = db.Table('article_tag',
db.Column('article_id', db.Integer, db.ForeignKey('article.id'), primary_key=True),
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'), primary_key=True))
class Article(db.Model):
__tablename__ = 'article'
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100))
content = db.Column(db.Text)
author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
author = db.relationship('User', backref='article')
tags = db.relationship('Tag', secondary=article_tag_table, backref='tags') # 中間表外鍵
class Tag(db.Model):
__tablename__ = 'tag'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50))

from flask import Flask
import config
from exts import db
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
if __name__ == '__main__':
app.run(debug=True)

from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from app import app
from exts import db
import models # 導入所有模型
manager = Manager(app)
Migrate(app, db)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
python manager.py db init 初始化
python manager.py db migrate 生成遷移腳本
python manager.py db upgrade 映射到數據庫




添加測試數據

from flask import Flask
import config
from exts import db
from models import User, Article, Tag
app = Flask(__name__)
app.config.from_object(config)
db.init_app(app)
@app.route('/')
def index():
user = User(username='user1', email='111@qq.com')
article = Article(title='title1', content='content1')
article.author = user
tag1 = Tag(name='python')
tag2 = Tag(name='java')
article.tags.append(tag1)
article.tags.append(tag2)
db.session.add(article)
db.session.commit()
return '數據已增加'
if __name__ == '__main__':
app.run(debug=True)
調接口





