日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

請求處理程序(Handler)

您可以使用Python請求處理程序響應接收到的事件并執行相應的業務邏輯。本文介紹Python請求處理程序的相關概念、結構特點和示例。

什么是請求處理程序

FC函數的請求處理程序,是函數代碼中處理請求的方法。當您的FC函數被調用時,函數計算會運行您提供的Handler方法處理請求。您可以通過函數計算控制臺請求處理程序配置Handler。

對Python語言的FC函數而言,您的請求處理程序格式為文件名.方法名。例如,您的文件名為main.py,方法名為handler,則請求處理程序為main.handler

關于FC函數的具體定義和相關操作,請參見創建事件函數

請求處理程序的具體配置均需符合函數計算平臺的配置規范。配置規范因請求處理程序類型而異。

Handler簽名

一個簡單的Handler簽名定義如下。

def handler(event, context):
    return 'hello world'

Handler示例解析如下:

  • handler:方法名稱。與函數計算控制臺配置的請求處理程序相對應。例如,為FC函數配置的handler為main.handler,那么函數計算會去加載main.py中定義的handler函數,并從handler函數開始執行。

  • event:您調用函數時傳入的參數。在Python 2.7運行環境中,類型為String。在Python 3運行環境中,類型為Bytes。

  • context:為您的FC函數調用提供在調用時的運行上下文信息。

說明

如您需要通過HTTP觸發器或自定義域名訪問函數,請先獲取請求結構體再自定義HTTP響應。更多信息,請參見HTTP觸發器調用函數

示例一:解析JSON格式參數

代碼示例

當你傳入JSON格式參數時,函數計算會透傳參數內容,需要您在代碼中自行解析。下面是解析JSON格式事件的代碼示例。

# -*- coding: utf-8 -*-
import json
def handler(event, context):
    evt = json.loads(event)
    return evt['key']

前提條件

創建事件函數

操作步驟

  1. 登錄函數計算控制臺,在左側導航欄,單擊函數

  2. 在頂部菜單欄,選擇地域,然后在函數頁面,單擊目標函數。

  3. 在函數配置頁面,選擇代碼頁簽,在代碼編輯器中輸入上述示例代碼,然后單擊部署代碼

    重要

    上述示例代碼中函數的請求處理程序是index.py中的handler方法。如果您的函數的請求處理程序配置與此不同,請更新對應的文件名和方法。

  4. 代碼頁簽,單擊測試函數右側的down圖標,從下拉列表中選擇配置測試參數,輸入如下示例測試參數,然后單擊確定

    {
      "key": "value"
    }
  5. 單擊測試函數

    函數執行成功后,查看返回結果,您可以看到返回結果為value

示例二:通過臨時密鑰安全讀寫OSS的資源

python3.12示例代碼

python3.12移除了上下文中的credentials字段,可以使用ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRETALIBABA_CLOUD_SECURITY_TOKEN環境變量訪問對象存儲OSS,代碼示例如下所示。更多請見:創建獲取AccessKey獲取扮演角色的臨時身份憑證

import json
import oss2

def handler(event, context):
    evt = json.loads(event)
    auth = oss2.StsAuth(os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), os.getenv("ALIBABA_CLOUD_SECURITY_TOKEN"))
    bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket'])
    bucket.put_object(evt['objectName'], evt['message'])
    return 'success'

python3.10示例代碼

您可以使用函數計算為您提供的臨時密鑰訪問對象存儲OSS,代碼示例如下所示。

import json
import oss2

def handler(event, context):
    evt = json.loads(event)
    creds = context.credentials
    # do not forget security_token
    auth = oss2.StsAuth(creds.access_key_id, creds.access_key_secret, creds.security_token)
    bucket = oss2.Bucket(auth, evt['endpoint'], evt['bucket'])
    bucket.put_object(evt['objectName'], evt['message'])
    return 'success'

上述代碼示例中的creds = context.credentials表示從context參數中獲取臨時密鑰,避免在代碼中硬編碼密碼等敏感信息。

重要

請確保當前所在的服務配置的角色具有訪問對象存儲OSS的權限。您可以登錄RAM控制臺,為該角色添加訪問對象存儲OSS的權限。

前提條件

創建事件函數

操作步驟

  1. 登錄函數計算控制臺,在左側導航欄,單擊函數

  2. 在頂部菜單欄,選擇地域,然后在函數頁面,單擊目標函數。

  3. 在函數配置頁面,選擇代碼頁簽,在代碼編輯器中輸入上述示例代碼,然后單擊部署代碼

    重要

    上述示例代碼中函數的請求處理程序是index.py中的handler方法。如果您的函數的請求處理程序配置與此不同,請更新對應的文件名和方法。

  4. 代碼頁簽,單擊測試函數右側的down圖標,從下拉列表中選擇配置測試參數,輸入如下示例測試參數,然后單擊確定

    {
      "endpoint": "http://oss-cn-shenzhen-internal.aliyuncs.com",
      "bucket": "oss-********",
      "objectName": "oss-test-object",
      "message": "oss-test-content"
    }
  5. 單擊測試函數

    函數執行成功后,查看返回結果,您可以看到返回結果為success

示例三:調用外部命令

您的Python程序也可以創建fork進程,調用外部命令。例如,您可以使用subprocess模塊調用Linux的ls -l命令,輸出當前目錄下的文件列表。代碼示例如下。

import os
import subprocess

def handler(event, context):
    ret = subprocess.check_output(['ls', "-l"])
    return ret

示例四:使用HTTP觸發器調用函數

示例代碼

關于HTTP觸發調用的請求負載格式和響應負載格式,請參見HTTP觸發器調用函數

# -*- coding: utf-8 -*-
import logging
import json
import base64

def handler(event, context):
    logger = logging.getLogger()
    logger.info("receive event: %s", event)

    try:
        event_json = json.loads(event)
    except:
        return "The request did not come from an HTTP Trigger because the event is not a json string, event: {}".format(event)
    
    if "body" not in event_json:
        return "The request did not come from an HTTP Trigger because the event does not include the 'body' field, event: {}".format(event)
    req_body = event_json['body']
    if 'isBase64Encoded' in event_json and event_json['isBase64Encoded']:
        req_body = base64.b64decode(event_json['body']).decode("utf-8")

    return {
        'statusCode': 200,
        'headers': {'Content-Type': 'text/plain'},
        'isBase64Encoded': False,
        'body': req_body
    }

前提條件

已使用上述示例創建運行環境為Python的函數,并創建HTTP觸發器。具體操作,請參見創建事件函數配置HTTP觸發器并使用HTTP觸發

操作步驟

  1. 登錄函數計算控制臺,在左側導航欄,單擊函數

  2. 在頂部菜單欄,選擇地域,然后在函數頁面,單擊目標函數。

  3. 在函數詳情頁面,單擊觸發器管理頁簽,獲取HTTP觸發器的公網訪問地址。

  4. 在Curl工具執行以下命令,調用函數。

    curl -i "https://test-python-ipgrwr****.cn-shanghai.fcapp.run" -d 'Hello fc3.0'

    以上命令中,https://test-python-ipgrwr****.cn-shanghai.fcapp.run為獲取到的HTTP觸發器公網訪問地址。

    重要
    • 如果HTTP觸發器的認證方式無需認證,您可以直接使用Postman或Curl工具來調用函數。具體操作,請參見本文操作步驟

    • 如果HTTP觸發器的認證方式簽名認證JWT認證,請使用簽名方式或JWT認證方式來調用函數。具體操作,請參見認證鑒權

    響應結果如下。

    HTTP/1.1 200 OK
    Content-Disposition: attachment
    Content-Length: 12
    Content-Type: application/json
    X-Fc-Request-Id: 1-64f7449a-127fbe39cd7681596e33ebad
    Date: Tue, 05 Sep 2023 15:09:14 GMT
    
    Hello fc3.0

錯誤分析

本示例代碼支持使用HTTP觸發器或者自定義域名調用。如果使用API調用,但配置的測試參數不符合HTTP觸發器請求格式規范時,會出現報錯。

例如,在控制臺上調用函數,配置請求參數為"Hello, FC!",單擊測試函數,收到的響應如下所示。

The request did not come from an HTTP Trigger, event: "Hello, FC!"