使用python在Azure函数中进行路由

时间:2018-09-21 14:47:18

标签: python http azure-functions

我知道我可以在Azure函数中使用查询参数来获取值

"myfunction?p=one&p2=two"

我指的是这个问题

  

How can I do Routing in Azure Functions?

但是它只处理C#和node.js,我想按照烧瓶样式获取值

/function/<name>/<id>

我可以直接访问,如何在Azure函数中的python中实现

我还提到了该文档,该文档仅涉及node.js和C#

  

https://github.com/Azure/azure-functions-host/wiki/Http-Functions

3 个答案:

答案 0 :(得分:1)

这取决于您使用的是功能V1还是功能V2。请注意,这两种语言目前都不在通用版本中:V1中的Python语言被认为是实验性的,可能永远不会采用GA。 Functions V2的Python语言工作者刚刚进入私有预览,并且目前正在积极开发中(请参见here)。总的来说,我强烈建议使用Functions 2.0以获得最佳的python支持,因为它支持Python 3,而我相信Functions V1仅支持Python 2。

话虽如此,这是两种单独的方法:

V1

您可以通过设置HTTP触发器绑定的“ route”字段,以与在function.json中对Node和C#相同的方式设置自定义路由。路径参数可以作为字符串在环境变量REQ_PARAMS_{route_param_name_as_upper_case}上使用。因此,在您的示例中,nameid的路由参数值分别为REQ_PARAMS_NAMEREQ_PARAMS_ID

V2

同样,您以与所有其他语言相同的方式在function.json文件中设置自定义路由。路由参数作为属性route_params附加在http请求对象上,类型为Mapping[str, str]

def main(req):
    name = req.route_params.get('name')
    return f'Hello, {name}!'

答案 1 :(得分:0)

您可以在function.json文件中添加“路由”以更改路径,例如:

"bindings": [
    {
      "authLevel": "anonymous",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "post"
      ],
      "route": "contact/{version}/certificate"
    }
    ....
    ]

在文件__init__.py中, 您可以通过version来获得version = req.route_params.get('version')

答案 2 :(得分:0)

要像azure函数中的Python Flask路由的 path 类型那样更加动态,您可以自定义如下所示的路由。 主要概念位于路线的* { restOfPath}

{
  "scriptFile": "__init__.py",
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": [
        "get",
        "post"
      ],
      "route": "Function1/{*restOfPath}"
    },
    {
      "type": "http",
      "direction": "out",
      "name": "$return"
    }
  ]
}

并编辑host.json以从如下所示的URL中删除单词api。

{
  "http": {
    "routePrefix": ""
  }
}

因此,通过上述配置,您可以使用该功能来提供如下所示的URL

  1. http:// localhost:7071 / Function1
  2. http:// localhost:7071 / Function1 / name
  3. http:// localhost:7071 / Function1 / name / id
  4. http:// localhost:7071 / Function1 /名称/ id /子名称
  5. http:// localhost:7071 / Function1 / name / id / sub-name / sub-id 等等...

再次在 init 中进行访问。py如下所示使用它。您将以字符串形式获取它

req.route_params.get("restOfPath")