【问题标题】:Flask Restful search queryFlask Restful 搜索查询
【发布时间】:2016-05-03 23:28:52
【问题描述】:

我已将我的 Flask API 从 Restless 迁移到 Restful。 Flask search query not using filters

有没有办法从客户端执行类似于 Flask Restless 的搜索查询? http://flask-restless.readthedocs.org/en/latest/searchformat.html

他们在 curl 请求中使用这种格式:

{"name": <fieldname>, "op": <operatorname>, "val": <argument>}

【问题讨论】:

  • 我遇到了同样的问题,正在寻找同样的magic。我已经将烧瓶宁静与棉花糖结合起来。也许只是更难...

标签: python flask flask-sqlalchemy flask-restful


【解决方案1】:

Flask-Restful 不会让您的 API 变魔术,因为它没有与您的数据库的任何内置连接。您必须自己编写逻辑。这是一种可能的方法。

class UserSearch(Resource):
    def get(self, search_term):
        results = User.query.filter(User.name.like('%'+search_term+'%')).all()

        # serialize and return items...

api.add_resource(UserSearch, '/users/search/<search_term>')

【讨论】:

    【解决方案2】:

    flask-restless的描述中提到,生成的API以JSON格式发送和接收消息,所以你必须以json格式发送查询,

    所以对我来说,我获取了查询字符串并在预处理器函数中对其进行解析,以在搜索过滤器中添加参数

    def get_many_preprocessor(search_params=None, **kw):
    l=[]
    for i in request.args.to_dict() : 
        if i == 'q' :
            break 
        else : 
            l.append( {u'name' :str(i) , u'op': u'eq' , u'val':request.args[i]})
    if len(l)>0 :
        # print len(l)
        search_params['filters']=l
    print search_params 
    

    然后将预处理器添加到我的管理器中

    manager.create_api(People, methods=['GET', 'POST', 'DELETE','PATCH'],url_prefix='/',preprocessors={ 'GET_MANY': [get_many_preprocessor],})
    

    这个想法是无论我得到一个包含参数的查询,我都会手动将它们添加到包含过滤器的 search_params。

    您可以在official doc 中找到更多信息。

    祝你好运,对不起我的英语不好

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-23
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 2019-12-07
      • 1970-01-01
      • 2018-05-01
      相关资源
      最近更新 更多