【问题标题】:Python Eve - REST API additional_lookup not workingPython Eve - REST API additional_lookup 不起作用
【发布时间】:2018-09-13 04:49:53
【问题描述】:

我面临着与here 描述的完全相同的问题。我的 API 有 user_creds 端点。当我访问localhost:5000/user_creds/ 时,我可以看到该集合中的所有文档。但是当我执行localhost:5000/user_creds/someemail@gmail.com 之类的操作时,我总是会收到 404 Not Found 响应。

settings.py 中的user_creds 域如下所示:

'user_creds': {
        'schema': { 
            'email': {
                'type': 'string',
                'regex': r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)",
                'required': True,
                'unique': True,
            },
            'password': {
                'type': 'string',
                'required': True
            },
        }

        'resource_methods': ['GET', 'POST'],

        'item_methods': ['GET', 'PATCH', 'PUT'],

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

我正在按照here 给出的示例进行操作,但无法弄清楚我哪里出错了。此外,如果我访问此 URL:http://127.0.0.1:5000/user_creds?email==%22abcd12@gmail.com%22,我会获取集合中的所有文档,而不是仅获取与电子邮件正则表达式匹配的单个文档。如果我访问这个http://127.0.0.1:5000/user_creds?where=email==%22abcd12@gmail.com%22,我会得到想要的响应。

【问题讨论】:

  • 对不起,如果这有点晚了,但我只是在学习 Eve。也许这会有所帮助。我认为如果你从你的正则表达式定义中删除“^”,你可能会得到你正在寻找的结果。

标签: python rest flask eve


【解决方案1】:

@Vorticity 有正确的解决方法。只需删除 Additional_lookup 正则表达式中的前导“^”,如下所示:

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

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

localhost:5000/user_creds/someemail@gmail.com
localhost:5000/user_creds/someemail%40gmail.com

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2023-03-04
    • 2014-01-28
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    相关资源
    最近更新 更多