Как сделать URL запроса "api/reviews?start_date=mm-dd-yyyy&end_date=mm-dd-yyyy" в колбе?

Я новичок в колбе, и я строю успокоительный API с помощью колбы.

class Review(Resource):
    def get(self, id = None):
        data = []
        if id:
            review_info = db.reviews.find_one({'_id': id})
            if review_info:
                return jsonify(review_info)
            else:
                return {"response": "no review found for {}".format(id)}

И мои маршруты в настоящее время

class Index(Resource):
    def get(self):
        return redirect(url_for("reviews"))

api = Api(app)
api.add_resource(Review, "/api/reviews/<int:id>", endpoint="id")

Я хочу создать URL "api/reviews? Start_date=dd-mm-yyyy&end_date=dd-mm-yyyy", как я могу это сделать? Я не хочу создавать URL вида "api/start_date/../end_date/.."

1 ответ

Решение

Этого вы можете достичь, используя marshmellow lib, который даст вам возможность прочитать параметры запроса в вашем запросе get . Ниже приведен пример реализации вашего запроса.

from marshmallow import Schema, fields
class ReviewRequestFormat(Schema):
     start_date=fields.Str(required=True)
     end_date=fields.Str(required=True)
     id=fields.Str(required=True)

class Review(Resource):
@use_kwargs(ReviewRequestFormat)
def get(self, **kwargs):
    id=kwargs.get('id')
    data = []
    if id:
        review_info = db.reviews.find_one({'_id': id})
        if review_info:
            return jsonify(review_info)
        else:
            return {"response": "no review found for {}".format(id)}

ваши маршруты будут как ниже

 class Index(Resource):
    def get(self):
        return redirect(url_for("reviews"))

api = Api(app)
api.add_resource(Review, "/api/reviews/", endpoint="id")

за дополнительной документацией по зефиру вы можете обратиться - https://marshmallow.readthedocs.io/en/latest/

Другие вопросы по тегам