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

Python不使用cgi.FieldStorage获取HTML表单数据的替代方案

不使用cgi.FieldStorage实现HTML表单数据处理的方案

需求背景

作为Python新手,需要实现用户输入姓名后提交到Python脚本并显示结果的功能,且由于cgi模块将在Python 3.13中移除,需替代cgi.FieldStorage的使用。

修改方案

以下是无需依赖cgi.FieldStorage的完整修改代码:

1. main.html(修订版)

将表单提交方法从POST改为GET,表单数据会以查询字符串的形式附加到请求URL中:

<!DOCTYPE HTML>
<html lang="en">

<head>
<meta charset="UTF8">
<title>Test Program</title>
</head>

<body>

<form method="GET" action="result.py">
Please enter your name: <input type="text" name="name">
<p><input type="submit" value="Submit"></p>
</form>

</body>
</html>

2. result.py(修订版)

通过环境变量获取请求URL,再解析查询字符串提取表单数据:

import os
import urllib.parse as ulp

print('Content-type:text/html\r\n\r\n')

print('<!DOCTYPE HTML>')
print('<html lang="en">')

print('<head>')
print('<meta charset="UTF8">')
print('<title>Test Program</title>')
print('</head>')

print('<body>')

# 获取包含查询字符串的完整请求URL
url = os.environ["REQUEST_URI"]

# 拆分URL的各个组件
parsed = ulp.urlparse(url)

# 解析查询字符串为键值对字典,值以列表形式存储
dic = ulp.parse_qs(parsed.query, keep_blank_values=True)

# 提取姓名参数(取列表第一个元素)
name = dic['name'][0]

print(f'<p>Hello, {name}</p>')

# 返回主页面的链接
print('<a href="main.html">Back</a>')

print('</body>')
print('</html>')

原理说明

  • GET方法提交表单时,输入的姓名会被编码到请求URL的查询字符串中(如result.py?name=xxx)
  • 通过os.environ["REQUEST_URI"]获取Web服务器传递的完整请求URL
  • 用ulp.urlparse拆分URL,提取出查询字符串部分;再用ulp.parse_qs将查询字符串解析为字典,每个键对应的值是一个列表(支持同键多值的情况),因此取[0]获取用户输入的姓名

后续建议

这个方案是适合新手的临时简单实现,长远来看,推荐学习Flask、FastAPI等Web框架,它们提供了更简洁、安全的表单数据处理方式,无需手动解析URL或处理环境变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:15:07