Flask Restful 搜索查询
Flask Restful search query
我已将我的 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>}
Flask-Restful 不会用魔法消失您的 API,因为它与您的数据库没有任何 built-in 连接。您必须自己编写逻辑。这是一种可行的方法。
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>')
如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 中找到更多信息。
祝你好运,抱歉我的英语不好
我已将我的 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>}
Flask-Restful 不会用魔法消失您的 API,因为它与您的数据库没有任何 built-in 连接。您必须自己编写逻辑。这是一种可行的方法。
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>')
如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 中找到更多信息。
祝你好运,抱歉我的英语不好