Flask Restful搜索查询

时间:2016-01-27 06:21:19

标签: python flask flask-sqlalchemy flask-restful

我已将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>}

2 个答案:

答案 0 :(得分:5)

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>')

答案 1 :(得分:0)

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中找到更多信息。

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