将参数传递给要在事件挂钩中执行的函数内部使用的端点
Passing an argument to an endpoint to be used inside the function performed in an event hook
我有一个函数,它是在一个名为 tab0001
的 mongodb 集合上执行的。我的功能非常有效:
from eve import Eve
def my_func(response):
resposta = pd.DataFrame.from_dict(response['_items'])
resposta = resposta.drop(columns = ['_id','var0030','var0053','var0052','var0058', 'var0057', 'var0028', 'var0029', 'var0059','_created', '_updated', '_etag', '_links'])
resposta = resposta.groupby('var0046', as_index=False).sum()
num_emp_total = sum(resposta['var0055'])
massa_sal_total = sum(resposta['var0054'])
mercado_num_emp = sum(((resposta['var0055']/num_emp_total) ** 2 ) * 10000)
mercado_massa_sal = sum(((resposta['var0054']/massa_sal_total) ** 2 ) * 10000)
response.clear()
response['ind0063'] = mercado_massa_sal
response['ind0062'] = mercado_num_emp
app = Eve()
app.on_fetched_resource_func += my_func
app.run()
但是,我想添加一个参数 "n" 也是 my_func(response, n) 的一个参数,但是 n 的值是由客户端使用 url 端点。没有参数 n,我通过以下方式访问我的函数:
"127.0.0.1:2000/func"
如果我想在执行 my_func 之前对集合 tab0001
进行筛选,我会这样做:
示例:"127.0.0.1:2000/func?where{"var0059":2016}"
并按 2016 年过滤数据并正确执行 my_func!
但是,在我的情况下,我还需要能够允许客户端选择将在函数内部使用的 n
值。集合中不同过滤器的 n 值不同,return 个不同的结果。
所以,我仔细研究了 post 请求事件挂钩,但我还没有想出如何调整以适应我的问题(还有 settings.py 文件)。在我看来,url 端点类似于:
"127.0.0.1:2000/func?where{"var0059":2016}&n=5"
我的 settings.py 是这样的:
MONGO_URI = "mongodb://localhost:27017/portal_db"
tab_schema = {
"schema": {
"var0030":{"type": "integer"},
"var0053":{"type": "integer"},
"var0052":{"type": "integer"},
"var0058":{"type": "integer"},
"var0054":{"type": "integer"},
"var0055":{"type": "integer"},
"var0046":{"type": "string"},
"var0057":{"type": "integer"},
"var0028":{"type": "string"},
"var0029":{"type": "integer"},
"var0059":{"type": "integer"}
}
}
func = {
'datasource': {
'source': 'tab0043'
},
"schema": {
"var0030":{"type": "integer"},
"var0053":{"type": "integer"},
"var0052":{"type": "integer"},
"var0058":{"type": "integer"},
"var0054":{"type": "integer"},
"var0055":{"type": "integer"},
"var0046":{"type": "string"},
"var0057":{"type": "integer"},
"var0028":{"type": "string"},
"var0029":{"type": "integer"},
"var0059":{"type": "integer"}
},
'pagination': False
}
DOMAIN = {
"tab0043": tab_schema,
"func": func
}
Eve 是基于 Flask 构建的。您可以通过 请求代理访问 Flask's request context 。
from flask import request
def my_func(response):
...
# here we want to get the value of n (e.g. ?n=some-value)
n = request.args.get('n')
我有一个函数,它是在一个名为 tab0001
的 mongodb 集合上执行的。我的功能非常有效:
from eve import Eve
def my_func(response):
resposta = pd.DataFrame.from_dict(response['_items'])
resposta = resposta.drop(columns = ['_id','var0030','var0053','var0052','var0058', 'var0057', 'var0028', 'var0029', 'var0059','_created', '_updated', '_etag', '_links'])
resposta = resposta.groupby('var0046', as_index=False).sum()
num_emp_total = sum(resposta['var0055'])
massa_sal_total = sum(resposta['var0054'])
mercado_num_emp = sum(((resposta['var0055']/num_emp_total) ** 2 ) * 10000)
mercado_massa_sal = sum(((resposta['var0054']/massa_sal_total) ** 2 ) * 10000)
response.clear()
response['ind0063'] = mercado_massa_sal
response['ind0062'] = mercado_num_emp
app = Eve()
app.on_fetched_resource_func += my_func
app.run()
但是,我想添加一个参数 "n" 也是 my_func(response, n) 的一个参数,但是 n 的值是由客户端使用 url 端点。没有参数 n,我通过以下方式访问我的函数:
"127.0.0.1:2000/func"
如果我想在执行 my_func 之前对集合 tab0001
进行筛选,我会这样做:
示例:"127.0.0.1:2000/func?where{"var0059":2016}"
并按 2016 年过滤数据并正确执行 my_func!
但是,在我的情况下,我还需要能够允许客户端选择将在函数内部使用的 n
值。集合中不同过滤器的 n 值不同,return 个不同的结果。
所以,我仔细研究了 post 请求事件挂钩,但我还没有想出如何调整以适应我的问题(还有 settings.py 文件)。在我看来,url 端点类似于:
"127.0.0.1:2000/func?where{"var0059":2016}&n=5"
我的 settings.py 是这样的:
MONGO_URI = "mongodb://localhost:27017/portal_db"
tab_schema = {
"schema": {
"var0030":{"type": "integer"},
"var0053":{"type": "integer"},
"var0052":{"type": "integer"},
"var0058":{"type": "integer"},
"var0054":{"type": "integer"},
"var0055":{"type": "integer"},
"var0046":{"type": "string"},
"var0057":{"type": "integer"},
"var0028":{"type": "string"},
"var0029":{"type": "integer"},
"var0059":{"type": "integer"}
}
}
func = {
'datasource': {
'source': 'tab0043'
},
"schema": {
"var0030":{"type": "integer"},
"var0053":{"type": "integer"},
"var0052":{"type": "integer"},
"var0058":{"type": "integer"},
"var0054":{"type": "integer"},
"var0055":{"type": "integer"},
"var0046":{"type": "string"},
"var0057":{"type": "integer"},
"var0028":{"type": "string"},
"var0029":{"type": "integer"},
"var0059":{"type": "integer"}
},
'pagination': False
}
DOMAIN = {
"tab0043": tab_schema,
"func": func
}
Eve 是基于 Flask 构建的。您可以通过 请求代理访问 Flask's request context 。
from flask import request
def my_func(response):
...
# here we want to get the value of n (e.g. ?n=some-value)
n = request.args.get('n')