Получение ошибки при вызове колбы Restful API в Python - PullRequest
0 голосов
/ 30 августа 2018

Здравствуйте, я новичок в python и получаю эту ошибку при вызове api на моей локальной машине 'localhost'

from flask import Flask,request
from flask_restful import Resource,Api

app = Flask(__name__)
api = Api(app)

todos = {}
class HelloWorld(Resource):
    def get(self):
        return 'Hello, World War 3'

class Todo(Resource):
    def get(self, todo_id):
        return {todo_id: todos[todo_id]}

    def put(self,todo_id):
        todos[todo_id] : request.form['data']
        return {todo_id: todos[todo_id]}

api.add_resource(HelloWorld,'/')
api.add_resource(Todo,'/<string:todoId>')

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

и вот ошибка, которую я получаю при вызове этого API

raise JSONDecodeError("Expecting
value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Это довольно маленький код, и все же я не могу уловить реальную проблему. Я делаю как на официальном сайте колбы: Сайт колбы

Я видел другие посты по той же теме, но они высокого уровня, которые я не могу понять. Любая помощь будет оценена, спасибо

1 Ответ

0 голосов
/ 30 августа 2018

В вашем коде есть следующие проблемы:

  • Вместо того, чтобы держать список Todo пустым, добавьте что-нибудь и протестируйте как: todos = {'1': "Say hello"}

  • Конечная точка API для todo имеет todoId в качестве строкового объекта, но в методе get и put у вас есть todo_id в качестве параметра. Оба должны быть одинаковыми.

  • Вместо возврата одной строки лучше вернуть объект JSON. Как в вашем коде заменить 'Hello, World War 3' на что-то вроде {'msg': 'Hello, World War 3'}

ПРИМЕЧАНИЕ: Последнее - только для вашей информации, чтобы все возвраты были стандартными, а не проблема на самом деле.

Используйте следующий код для тестирования и сравните его с соответствующим кодом. Вы получите представление.

from flask import Flask, request
from flask_restful import Resource, Api

app = Flask(__name__)
api = Api(app)

todos = {'1': "Say hello"}

class HelloWorld(Resource):
    def get(self):
        return {'msg': 'Hello, World War 3'}

class Todo(Resource):
    def get(self, todo_id):
        return {todo_id: todos[todo_id]}

    def put(self,todo_id):
        todos[todo_id] : request.form['data']
        return {todo_id: todos[todo_id]}

api.add_resource(HelloWorld,'/')
api.add_resource(Todo,'/<string:todo_id>')

if __name__ == '__main__':
    app.run(debug=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...