首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未使用筛选器的Flask搜索查询

未使用筛选器的Flask搜索查询
EN

Stack Overflow用户
提问于 2016-01-22 16:42:45
回答 1查看 1.4K关注 0票数 0

我有一个工作的Flask API,现在我想实现搜索查询。我的理解是,过滤器应用于客户端,Flask API负责处理它。

代码语言:javascript
运行
复制
Flask==0.10.1
Flask-HTTPAuth==2.7.0
Flask-Limiter==0.9.1
Flask-Login==0.3.2
Flask-Mail==0.9.1
Flask-Principal==0.4.0
Flask-Restless==0.17.0

我遵循了文档并执行了搜索查询,但仍然只能检索到相同的结果:

http://flask-restless.readthedocs.org/en/latest/searchformat.html

无过滤器:

代码语言:javascript
运行
复制
curl -u aaa:bbb -H "Content-Type: application/json" http://0.0.0.0:8080/api/1.0/job/

{
  "jobs": [
    {
      "description": "ESXi job completed", 
      "reference": "07FC78BCC0", 
      "status": 1
    }, 
    {
      "description": "Server discovery failed. Please verify HTTPS/SSH parameters", 
      "reference": "A6EE28F4C0", 
      "status": -1
    }]
}

基于:http://flask-restless.readthedocs.org/en/latest/searchformat.html的搜索查询

代码语言:javascript
运行
复制
curl -u aaa:bbb -G -H "Content-Type: application/json" -d '{
> "filters": [{"name": "description", "op": "like", "val": "%ESXi%"}]}' http://0.0.0.0:8080/api/1.0/job/

代码语言:javascript
运行
复制
curl -u aaa:bbb -G -H "Content-Type: application/json" -d '{"filters": [{"name": "status", "op": "eq", "val":0}]}' http://0.0.0.0:8080/api/1.0/job/

并显示了相同的结果。

这是我的Flask端点:

代码语言:javascript
运行
复制
def get_jobs():
    """

    :return:
    """
    try:
        log.info(request.remote_addr + ' ' + request.__repr__())
        jobs = Model.Job.query.order_by(desc(Model.Job.job_start)).limit(settings.items_per_page).all()

        # =========================================================
        # Get JOBS
        # =========================================================

        values = ['description', 'status', 'reference']
        response = [{value: getattr(d, value) for value in values} for d in jobs]
        return jsonify(jobs=response)


    except Exception, excpt:
        log.exception(excpt.__repr__())
        response = json.dumps('Internal Server Error. Please try again later')
        resp = Response(response, status=500, mimetype='application/json')
        return resp

我的模型

代码语言:javascript
运行
复制
class Job(db.Model, AutoSerialize, Serializer):
    """

    """
    __tablename__ = 'job'
    __public__ = ('status','description','reference','job_start','job_end')
    id = Column(Integer, primary_key=True, server_default=text("nextval('job_id_seq'::regclass)"))
    description = Column(String(200))
    reference = Column(String(50))
    job_start = Column(DateTime)
    job_end = Column(DateTime)
    fk_server = Column(ForeignKey(u'server.id'))
    owner_id = Column(ForeignKey(u'auth_user.id'))
    is_cluster = Column(Boolean)
    host_information = Column(String(1024))
    status = Column(Integer, nullable=False)
    owner = relationship(u'AuthUser')
    server = relationship(u'Server')

    def serialize(self):
        """

        :return:
        """

        d = Serializer.serialize(self)
        return d

我需要改变什么吗?

EN

回答 1

Stack Overflow用户

发布于 2016-01-22 19:18:17

也许将__public__作为作业属性会干扰过滤的工作方式。在Flask-Restless文档中有一个关于这方面的警告。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34942329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档