Ресурс с несколькими запросами, но только некоторые требуют аргументов - PullRequest
0 голосов
/ 19 июня 2020

Я новичок в Flask и Flask -RESTful. Я хочу написать API для задач. В /todos я хочу определить запросы GET и POST, где для последнего требуется строка, содержащая фактическое задание в качестве аргумента. У меня нет проблем с отдельными запросами и обязательными аргументами:

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

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

todos = {1: "test"}

class Todos(Resource):

    def get(self):
        if len( todos ) > 0:
            return json.dumps( todos )
        else:
            return "No todo found", 204

class GetTodo(Resource):

    parser = reqparse.RequestParser()
    parser.add_argument("todoId", required=True, type=int, help="ID cannot be converted")

    def get(self ):
        args = GetTodo.parser.parse_args()
        todoId = args["todoId"]

        if todoId in todos:
            return todos[todoId], 200
        else:
            return "Todo nicht gefunden", 404

api.add_resource(Todos, '/todos')
api.add_resource(GetTodo, "/todos/showtodo")

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

У меня также есть класс PostTodo:

class PostTodo(Resource):
    parser = reqparse.RequestParser()
    parser.add_argument("todo", required=True, type=str, help="Please specify the todo")
    def post(self):
        args = PostTodo.parser.parse_args()
        todo = args["todo"]

        id = len(todos) + 1
        todos.update( { id : todo } )

Чтобы добавить метод POST, я вижу две возможности:

  1. Добавьте класс PostTodo в качестве другого класса ресурсов в существующую конечную точку '/ todos'.
  2. Добавьте содержимое класса PostTodo к классу Todos, чтобы получить другой тип запроса в том же ресурсе.

Какой из них лучше? Я заставляю работать первый, но думаю, что добавлять два ресурса к одной конечной точке не очень удобно. Для второго способа я не знаю, как установить аргумент, необходимый для POST, как требуется, но не для GET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...