我已将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>}
答案 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中找到更多信息。
祝你好运,我的英语不好对不起