使用Flask-RESTful

时间:2018-06-15 21:36:26

标签: flask query-string postman flask-restful

我有一个由以下内容定义的烧瓶RESTful端点:

class SearchEvents(Resource):
    def get(self, name, start_date, end_date):
         #do stuff

api.add_resource(endpoints.SearchEvents, '/events/<string:name>/<string:start_date>/<string:end_date>')

我正在使用Postman手动测试它。我想传递start_date和end_date的空值。但是:

screenshot of postman interface 我已经尝试将网址修改为:

http://127.0.0.1:5000/events/test/ /  #<--Spaces

http://127.0.0.1:5000/events/test/""/""

无济于事。

2 个答案:

答案 0 :(得分:3)

最终通过使用烧瓶稳定的request对象解决了此问题,该对象具有args属性,该属性从请求url中检索查询参数:

from flask_restful import request #import request from flask restful

class SearchEvents(Resource):
    def get(self):
        args = request.args #retrieve args from query string

api.add_resource(endpoints.SearchEvents, '/events')

然后发出如下请求:http://127.0.0.1:5000/events?param1=value1&param2=value2 或传递空值:http://127.0.0.1:5000/events?param=&param2=value1

答案 1 :(得分:1)

您传递的值不在查询字符串中。您正在使用路径部件作为参数,因此除非您提供/events/some_name/2019-86-98/2100-9885-24515形式的某些内容,否则路线不会匹配。你所做的尝试被烧瓶作为不匹配的路线捕获,而你找不到404。

要将这些参数作为查询字符串的一部分发送,将使用类似的内容 /events?name=some_name&start_date=2019-86-98&end_date=2100-9885-24515并且要获取路由处理程序中的值,您应该使用name = request.args.get('name'),依此类推。传递空值则意味着点击相同的URL但没有查询参数。