You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python开发AWS Lambda时HTML表单POST提交数据获取问题

Python Lambda实现HTML表单提交返回欢迎语方案

问题背景

  • 需求:用Python开发Lambda函数,实现简单表单交互:GET请求返回带姓名输入框的HTML表单,用户填写姓名(例如Mary)提交后,页面输出welcome Mary的结果,全程不依赖PHP。
  • 已知正常逻辑:GET请求判断分支运行正常,表单action属性已配置为对应Lambda的访问URL。
  • 核心问题:POST请求分支不知道如何收集HTML表单提交的传输数据,无法获取用户输入的姓名值。
  • 原有未完成代码:
import json
  
def lambda_handler(event, context):
    
   
    if event['requestContext']['http']['method'] == 'GET':
        
        content='''
        <html>
        <body>

        <form action="my lambda's URL here" method="POST">
        Name: <input type="text" name="fname"><br>
        
        <input type="submit">
        </form>

        </body>
        </html>

        '''
    
    if event['requestContext']['http']['method'] == 'POST':
    
        content='''
        <html>
        <body>

        <p>
        "I would like to see:"Welcome Mary" here but  i don't know how!
        </p>
        

        </body>
        </html>

        '''
         
   
    
    
    
    
    
    # TODO implement
    response = {
        "statusCode": 200,
        "headers": {
            'Content-Type': 'text/html',
        },

实现方法

HTML表单默认以application/x-www-form-urlencoded格式提交POST数据,对接Lambda时(不管是直接用函数URL还是挂API Gateway代理集成),提交的表单数据会存放在event的body字段中,用Python标准库urllib.parse的parse_qs方法就能直接解析,不需要安装第三方依赖。

具体修改步骤

  • 导入解析表单需要的标准库模块
  • POST分支中解析body字段的表单数据,提取fname输入框的用户输入值
  • 补全原有代码缺失的逻辑:给response结构体添加body字段传入HTML内容,添加return语句返回响应
  • 将提取到的用户名拼接到POST分支返回的HTML内容中

完整可运行代码

from urllib.parse import parse_qs
import json
  
def lambda_handler(event, context):
    http_method = event['requestContext']['http']['method']
    
    if http_method == 'GET':
        content = '''
        <html>
        <body>
        <form action="替换为你的Lambda实际访问URL" method="POST">
        Name: <input type="text" name="fname"><br>
        <input type="submit">
        </form>
        </body>
        </html>
        '''
    
    elif http_method == 'POST':
        # 解析urlencoded格式的表单数据
        form_data = parse_qs(event.get('body', ''))
        # 取姓名字段值,空值兜底避免报错
        username = form_data.get('fname', [''])[0]
        content = f'''
        <html>
        <body>
        <p>welcome {username}</p>
        </body>
        </html>
        '''
    
    response = {
        "statusCode": 200,
        "headers": {
            'Content-Type': 'text/html',
        },
        "body": content
    }
    return response

注意事项

  • 如果你的Lambda开启了Base64编码触发(API Gateway部分配置场景会出现),需要先判断isBase64Encoded字段值,为True时先用base64.b64decode(event['body']).decode('utf-8')解码后再做表单解析
  • 上述逻辑兼容Lambda函数URL、API Gateway代理集成两种主流触发场景,不需要额外调整配置
  • 表单默认提交格式即可被正常解析,不需要额外设置enctype属性

内容的提问来源于stack exchange,提问作者vbarros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:01:22