請求處理程序(Handler)
更新時間 2025-10-16 09:28:36
最近更新時間: 2025-10-16 09:28:36
分享文章
本文介紹如何使用Python請求處理程序響應接收到的事件并執行相應的業務邏輯。
請求處理程序
請求處理程序是您提供的一個方法。當您的函數被調用時,函數計算會運行該方法處理請求。
您可以通過函數計算控制臺頁面配置請求處理程序,對于Python語言的函數,請求處理程序需配置為 [文件名].[方法名]。例如,您的文件名為index.py,方法名為handler,則請求處理程序可配置為 index.handler。
事件請求處理程序的方法簽名定義如下:
def?handler(event,?context):
????return?'Hello?Python!'
- 方法名
您可以自定義方法名稱。 - event入參
您調用函數時傳入的參數。 - context入參
context參數中包含一些函數的運行時信息(例如RequestId、臨時AccessKey等)。
HTTP請求處理程序的方法簽名定義如下:
#?-*-?coding:?utf-8?-*-
HELLO_WORLD?=?b'Hello?world!\n'
def?handler(environ,?start_response):
????status?=?'200?OK'
????response_headers?=?[('Content-type',?'text/plain')]
????start_response(status,?response_headers)
????return?[HELLO_WORLD]
- 方法名
您可以自定義方法名稱。 - environ入參
用于存放所有HTTP請求的信息。 - start_response入參
發送 HTTP 響應的函數,包含兩個參數:HTTP狀態碼、一組Python list對象組成的HTTP Headers。
示例:獲取JSON中的字段
#?-*-?coding:?utf-8?-*-
import?json
def?handler(event,?context):
????person?=?json.loads(event)
????
????name?=?person["name"]
????address?=?person["address"]
????
????return?f"Input?name?is:?{name},?address?is:?{address}"
示例二:使用HTTP觸發器調用函數
import json
import logging
# 配置日志
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def handler(environ, start_response):
# 獲取請求路徑、URI和客戶端IP
request_path = environ.get('FC_REQUEST_PATH', '')
request_uri = environ.get('FC_REQUEST_URI', '')
request_client_ip = environ.get('FC_REQUEST_CLIENT_IP', '')
# 記錄日志
logger.info("hello")
print("print hello")
# 獲取請求體數據
try:
# 讀取請求體
request_body_size = int(environ.get('CONTENT_LENGTH', 0))
except (ValueError):
request_body_size = 0
request_body = environ['wsgi.input'].read(request_body_size)
# 解析JSON請求體
try:
if request_body:
json_data = json.loads(request_body.decode('utf-8'))
logger.info(f"body: {json.dumps(json_data)}")
else:
json_data = {}
logger.info("body: empty")
except json.JSONDecodeError as e:
logger.error(f"JSON解析錯誤: {e}")
json_data = {}
# 構建響應內容
response_content = f"Path: {request_path}\nUri: {request_uri}\nIP: {request_client_ip}\n"
# 設置響應狀態和頭部
status = '200 OK'
response_headers = [
('header1', 'value1'),
('header2', 'value2'),
('Content-Type', 'text/plain')
]
start_response(status, response_headers)
# 返回響應內容
return [response_content.encode('utf-8')]