将参数传递给端点,以便在事件h中执行的函数中使用

2024-09-30 16:41:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数,它是在名为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”作为我的函数(response,n)的参数,但是n的值是由客户端使用url端点给出的。如果没有参数n,我可以通过以下方式访问函数:

"127.0.0.1:2000/func"

如果我想在执行myu funct之前对集合tab0001进行筛选,我会:

例如:"127.0.0.1:2000/func?where{"var0059":2016}"它过滤2016年的数据,并正确执行我的函数

然而,在这种情况下,我还需要允许客户机选择一个值n,它将在函数中使用。不同的n值在集合的不同过滤器中,返回不同的结果

因此,我对post-request事件挂钩很感兴趣,但我还没有想到如何调整以适应我的问题(还有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
}

Tags: 函数responsetypeintegernumtotalfuncsum
1条回答
网友
1楼 · 发布于 2024-09-30 16:41:30

夏娃长在烧瓶上。您可以通过请求代理访问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')

相关问题 更多 >