【问题标题】:Retrieve query params with Flask-RESTful使用 Flask-RESTful 检索查询参数
【发布时间】:2018-06-15 21:36:25
【问题描述】:

我有一个烧瓶 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 传入空值。然而:

我尝试将网址修改为:

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

和

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

无济于事。

【问题讨论】:

    标签: flask query-string postman flask-restful


    【解决方案1】:

    最终通过使用flask-restful 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&amp;param2=value2 或者传递空值:http://127.0.0.1:5000/events?param=&amp;param2=value1

    【讨论】:

    • 我注意到get函数现在只传递self属性,为什么要删除所有查询参数(name、start_date、end_date)?
    • 这个最佳答案有缺陷。我很想知道变量args 的类型,就像args = request.args 一样。如何使用它?它是字典还是每个参数都有属性的类?等等。读者需要尝试调试或挖掘文档,然后通过反复试验确定类型,而不是已经知道。
    【解决方案2】:

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

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

    【讨论】:

    • 我已经意识到这一点,但我无法在 Flask-RESTful 中找到实现这一点的方法:当我将查询字符串放入端点 url 时,包含正确语法的 Postman 请求会得到一个404 我是否提供值。不确定您是否熟悉flask-RESTful,但我会很感激这方面的一些指示
    • 我对 flask-restplus 非常熟悉,但要求指点不会给你答案。当您说某事不起作用时,请提出具体问题或发布一段代码,否则无法为您提供帮助。首先,您应该更改将资源注册到api.add_resource(endpoints.SearchEvents, '/events') 的方式,否则当您使用邮递员向127.0.0.1:5000/events 发出请求时,它不会被命中。从基本的东西开始,删除所有参数并从那里开始构建。
    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 2019-06-20
    • 2022-01-11
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2012-08-03
    • 2012-07-26
    相关资源
    最近更新 更多