Я новичок в 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, я вижу две возможности:
- Добавьте класс PostTodo в качестве другого класса ресурсов в существующую конечную точку '/ todos'.
- Добавьте содержимое класса PostTodo к классу Todos, чтобы получить другой тип запроса в том же ресурсе.
Какой из них лучше? Я заставляю работать первый, но думаю, что добавлять два ресурса к одной конечной точке не очень удобно. Для второго способа я не знаю, как установить аргумент, необходимый для POST, как требуется, но не для GET.