я не могу получить все результаты в ответ API? возвращается только 1 результат? - PullRequest
0 голосов
/ 09 апреля 2020

Я новичок в flask и пытаюсь создать API, который возвращает json ответ всех сообщений в базе данных, но я не могу получить все из них, возвращается только одно сообщение. (Я использую ваниль flask не использует пакеты типа 'flask -restful'). это то, что я пробовал.

from .db import get_db
from flask import jsonify,Blueprint
bp= Blueprint("api",__name__,url_prefix="/api")

@bp.route("/posts",methods=("GET",))
def get_posts():
    db = get_db()
    posts=db.execute('SELECT p.id, title, body, created, author_id, username'
   ' FROM post p JOIN user u ON p.author_id = u.id'
   ' ORDER BY created DESC').fetchall()
   for post in posts:
     title=post["title"]
     body=post["body"]
     author=post["username"]
     return jsonify(
         title=title,
         body=body,
         author=author
     )'''

возвращает только первый пост в формате JSON. Я хочу все сообщения.

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Проблема в том, что jsonify возвращает Flask Response, поэтому попытка добавить его в список не очень хорошая идея.
Например, как вы могли бы вернуть несколько Ответов из HTTP-запроса ?

Лучшая идея - сохранить все ваши сообщения в списке и затем jsonify их.

post_list = []
for post in posts:
   title=post["title"]
   body=post["body"]
   author=post["username"]
   resp = {"title":title, "body":body, "author":author}
   post_list.append(resp)
return jsonify(post_list)
0 голосов
/ 09 апреля 2020

Это происходит потому, что вы возвращаете результат внутри для l oop, следовательно, он прекращает итерацию и возвращает первый результат. Вы можете создать список и добавить jsonify в этот список, или, возможно, вы можете использовать Marshmallow, чтобы выполнить сериализацию для вас. Если вы хотите создать список и добавить результат, вот что вы можете сделать:

post_list = []
for post in posts:
   ...
   post_list.append(jsonify(
     title=title,
     body=body,
     author=author
 ))
return post_list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...