【问题标题】:can't search eve rest API - additional lookup not working无法搜索 eve rest API - 附加查找不起作用
【发布时间】:2017-05-08 02:15:00
【问题描述】:

我在这里遵循示例:https://github.com/pyeve/eve-demo/blob/master/settings.py

当我转到 localhost:5000/apps 时,我可以看到我收藏中的所有文档,但是当我在 localhost:5000/apps/example@gmail.com 搜索电子邮件时,它显示“404 未找到” .

我已经确认了正则表达式,并且电子邮件地址在文档中。谁能看出哪里出了问题?

运行.py

from eve import Eve


if __name__ == '__main__':
    app = Eve()
    app.run()

settings.py:

RESOURCE_METHODS = ['GET', 'POST', 'DELETE']
ITEM_METHODS = ['GET', 'PATCH', 'PUT', 'DELETE']


MONGO_HOST = 'localhost'
MONGO_PORT = 27017
MONGO_DBNAME = 'test_database'



apps = {
    'item_title' : 'app',

    'additional_lookup' : {
    'url' : 'regex("\b[\w.-]+?@\w+?\.\w+?\b")',
    'field' : 'developer_email',
    },

        'schema': {
            'address' : {
                'type' : 'string'
                },
            'developer_email' : {
                'type' : 'string',
                'minlength' : 1,
                'maxlength' : 15,
                'required' : True,
                'unique' : True,
            }
            }

DOMAIN = {
    'apps' : apps,
}

【问题讨论】:

  • 看来您需要添加一个烧瓶自定义 URL 转换器以使其理解电子邮件格式,但我不知道如何将其添加到 pyeve 架构中。

标签: python rest eve


【解决方案1】:

在您的 settings.py 中,您没有正确进行查找。应该是的。

apps = {
    'item_title' : 'app',

    'additional_lookup' : {
    'url' : 'apps/regex("\b[\w.-]+?@\w+?\.\w+?\b")',
    'field' : 'developer_email',
    },

        'schema': {
            'address' : {
                'type' : 'string'
                },
            'developer_email' : {
                'type' : 'string',
                'minlength' : 1,
                'maxlength' : 15,
                'required' : True,
                'unique' : True,
            }
            }

【讨论】:

  • 感谢您的反馈,但是当我尝试更改时,我看到了错误:ValueError: malformed url rule: '/apps/'
【解决方案2】:

您不能向同一个端点添加多个额外的查找。但是,您可以做的是让多个端点使用相同的数据源。默认情况下,标准项目入口点定义为 /apps/'objectID'/。您必须为 /apps/'new endpoint' 配置另一个端点。 Python-Eve: More than one additional lookup

【讨论】:

    【解决方案3】:

    @Vorticity 指出了相关question 中的修复。请尝试以下操作:

    'additional_lookup': {
        'url': 'regex("[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$")',
        'field': 'developer_email'
    }
    

    您应该能够检索带有或不带有 url 编码的项目,例如:

    localhost:5000/apps/example@gmail.com
    localhost:5000/apps/example%40gmail.com
    

    如果您有兴趣通过电子邮件 _only(不是对象 ID)在项目级别检索您的项目,您可以将 item_lookup_field 与 item_url 一起使用:

    apps = {
        ...
        'item_url': 'regex("[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$")',
        'item_lookup_field': 'developer_email'
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多