我有以下on_fetch挂钩,它在第一次检索资源之前填充资源:
# bootstrap resources with default data if it's not already there
def before_returning_resource(resource, documents):
if resource == 'vlans' or resource == 'switches':
if not documents:
r = app.data.driver.db[resource]
filename = 'bootstrap_' + resource + '.json'
with open(os.path.join(script_dir, filename), 'r') as f:
to_insert = json.loads(f.read())
r.insert(to_insert)
documents.extend(to_insert)
在第一次尝试加载集合时,它返回的数据不包含额外的HATEOAS内容,如_links等,因为它在插入时添加,我现在必须返回一些东西。我重新加载后,东西就在那里。关于如何在第一次请求期间重新检索数据的任何想法,以便它包含正常请求中的所有内容?
第一个请求示例:
{
"_items": [
{
"_id": "5307a7301f72fa82ae83474a",
"ip_address": "10.50.159.196",
"name": "RCG 1G Core Switch",
"dns": "switch196",
"transport": "telnet"
},
{
"_id": "5307a7301f72fa82ae83474b",
"ip_address": "10.47.152.2",
"name": "Rack E1 sw1",
"dns": "re1-sw1",
"transport": "telnet"
},
...
后续请求示例:
{
"_items": [
{
"_updated": "Thu, 01 Jan 1970 00:00:00 GMT",
"name": "RCG 1G Core Switch",
"_links": {
"self": {
"href": "127.0.0.1:5000/switches/5307a7301f72fa82ae83474a",
"title": "Switche"
}
},
"dns": "switch196",
"_created": "Thu, 01 Jan 1970 00:00:00 GMT",
"_id": "5307a7301f72fa82ae83474a",
"ip_address": "10.50.159.196",
"_etag": "4359b74209189b0bbbbfd4b92e647d84d10ede47",
"transport": "telnet"
},
...
答案 0 :(得分:0)
所以基本上你要归还假的物品,你的数据库中真的不存在,希望客户以后再存储它们?你为什么要提供一些不存在的东西的链接?无论如何,文档链接上的以下GET将达到404.
您可能应该使用此数据预先填充数据库。这些链接将在那里,它们将是合法的(它们可以工作),你不需要使用on_fetch
钩子来玩弄。
此外,虽然您可以在钩子中伪造90%的文档链接,但是在存储新文档后,您无法知道新文档将被分配到的真实object_id
。