Python前夕-REST API Additional_lookup无法正常工作

时间:2018-09-13 04:49:54

标签: python rest flask eve

我正面临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,将得到期望的答复。

1 个答案:

答案 0 :(得分:1)

@Vorticity具有正确的解决方案。只需按如下所示在您的Additional_lookup正则表达式中删除前导“ ^”即可:

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

您应该能够使用或不使用网址编码来检索您的商品,例如:

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

如果您有兴趣通过仅电子邮件 (而不是对象ID)在商品级别检索商品,可以将item_lookup_fielditem_url结合使用:< / p>

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