Flask-Restful базовая настройка

Когда я пытаюсь пойти в /api Я получаю преобразовать свою базу данных в API.

from flask import Flask , render_template   
from flask_restful import Resource, Api,marshal_with, fields
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config.from_object('config')
api = Api(app)
db = SQLAlchemy(app)

class songbook(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    song_book = db.Column(db.String(80))
    title = db.Column(db.String(120))
    artist = db.Column(db.String(120))
    disc_number = db.Column(db.String(120))
    track_number = db.Column(db.String(120))

    def __init__(self, song_book, title, artist, disc_number, track_number):
        self.song_book = song_book  
        self.title = title
        self.artist = artist
        self.disc_number = disc_number
        self.track_number = track_number

resource_fields = {
    'song_book': fields.String,
    'title': fields.String,
    'artist': fields.String,
    'disc_number': fields.String,
    'track_number': fields.String,
}

class HelloWorld(Resource):
    @marshal_with(songbook)
    def get(self):
        return songbook.query.all()

api.add_resource(HelloWorld, '/api')

@app.route('/')
def hello_world():
    return render_template("index.html")

if __name__ == '__main__':
    app.run(debug=True)

Я получаю код ошибки

AttributeError: объект типа 'songbook' не имеет атрибута 'items'

Я пытался учиться здесь. Любые другие документы или ссылки будут полезны.

1 ответ

Решение

Эта аннотация ожидает словарь @marshal_with,

Вы закончили тем, что дали это songbook класс, который, хотя вы могли бы быть def __dict__(self) (не уверен, не пробовал) и вернуть схему, похоже, вы хотели сделать @marshal_with(resouce_fields) вместо.

Другие вопросы по тегам