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
相关产品推荐
相关产品推荐

