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

替换即将弃用的CGI:求无cgi.FieldStorage处理HTML表单示例

不用cgi.FieldStorage处理HTML表单的示例

一、使用multipart库处理multipart/form-data类型表单

你之前的错误是未传入MultipartParser必填的stream和boundary参数,正确用法需要从请求环境中获取请求体流和Content-Type头里的边界值:

import os
import multipart

# 获取请求体流(WSGI环境下对应wsgi.input)
stream = os.environ['wsgi.input']
# 从Content-Type头中提取boundary参数
content_type = os.environ.get('CONTENT_TYPE', '')
boundary = content_type.split('boundary=')[-1]

# 初始化解析器并解析表单
parser = multipart.MultipartParser(stream, boundary)
form_data = parser.parse()

# 提取目标字段值
if 'number' in form_data:
    print(form_data['number'].value)

二、使用email库处理multipart/form-data类型表单

email.message.Message不存在parse_args方法,需用email.parser.BytesParser来解析请求体:

import os
import email.parser

# 读取请求体字节数据
stream = os.environ['wsgi.input']
body = stream.read()
# 获取Content-Type头信息
content_type = os.environ.get('CONTENT_TYPE', '')

# 解析表单数据
msg = email.parser.BytesParser().parsebytes(body)
# 遍历表单部件提取字段
for part in msg.walk():
    if part.is_multipart():
        continue
    field_name = part.get_param('name', header='Content-Disposition')
    field_value = part.get_payload(decode=True).decode('utf-8')
    if field_name == 'number':
        print(field_value)

三、处理application/x-www-form-urlencoded类型表单

如果是普通编码的表单,直接用urllib.parse解析即可:

import os
import urllib.parse

# 读取并解码请求体
stream = os.environ['wsgi.input']
body = stream.read().decode('utf-8')
# 解析表单数据
form_data = urllib.parse.parse_qs(body)
# 提取目标字段(注意parse_qs返回值为列表)
if 'number' in form_data:
    print(form_data['number'][0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:15:00