首页 > 解决方案 > 烧瓶返回空的json

问题描述

尝试从教程中构建一个简单的 Flask 应用程序。

在这个阶段,尝试从控制台发起一个成功的请求,在我的数据库中发布新数据。我通过 app.py 在一个窗口中运行我的服务器,然后在控制台窗口中启动请求,如下所示:

requests.post("http://localhost:5000/todo", json={"Title":"my first todo", "Description":"my first todo"})

期望在我访问时看到该输出http://localhost:5000/todo。服务器显示代码 200,但是当我访问该站点时,json 为空:[]

应用程序.py:

from flask import Flask, request, jsonify
from models import Schema
from service import ToDoService
import json

app = Flask(__name__)

@app.route("/todo", methods=["POST"])
def create_todo():
    return jsonify(ToDoService().create(request.get_json()))

@app.route("/todo", methods=["GET"])
def list_todo():
    return jsonify(ToDoService().list())

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

模型.py:

import sqlite3

class Schema:
    def __init__(self):
        self.conn = sqlite3.connect('todo.db')
        self.create_user_table()
        self.create_to_do_table()

    def create_to_do_table(self):


class ToDoModel:
    global TABLENAME
    TABLENAME = "Todo"

    def __init__(self):
        self.conn = sqlite3.connect('todo.db')

    def get_by_id(self, _id):
        where_clause = f"AND id={_id}"
        return self.list_items(where_clause)

    def create(self, text, description):
        query = f'insert into {TABLENAME} ' \
                f'(Title, Description) ' \
                f'values ("{text}","{description}")'

        result = self.conn.execute(query)
        return self.get_by_id(result.lastrowid)

    def select(self, text, description):
        query = f'values ("{text}","{description}")'

        result = self.conn.execute(query)
        return result

    def list_items(self, where_clause=""):
        query = f"SELECT id, Title, Description, DueDate, _is_done " \
                f"from {TABLENAME} WHERE _is_deleted != {1} " + where_clause
        #print (query)
        result_set = self.conn.execute(query).fetchall()
        result = [{column: row[i]
                  for i, column in enumerate(result_set[0].keys())}
                  for row in result_set]
        return result

服务.py:

from models import ToDoModel

class ToDoService:
    def __init__(self):
        self.model = ToDoModel()

    def create(self, params):
        result = self.model.create(params["Title"], params["Description"])
        return result

    def update(self, item_id, params):
        return self.model.update(item_id, params)

    def list(self):
        response = self.model.list_items()
        return response

标签: pythonjsonsqlitehttpflask

解决方案


推荐阅读