Python 前夕 - REST API additional_lookup 不工作

Python Eve - REST API additional_lookup not working

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

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

'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,我会得到想要的响应。

@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_field together with item_url:

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