📜  解码多部分表单数据python(1)

📅  最后修改于: 2023-12-03 14:57:24.649000             🧑  作者: Mango

解析多部分表单数据 Python

在web开发中,多部分表单数据通常用于上传文件和表单数据发送。Python提供了一种方式来解析这些数据。在python中,我们可以使用cgicgitb模块来解析多部分表单数据。下面是一个简单的例子,演示如何使用这些模块。

安装

cgicgitb是Python的内置模块,无需安装。您可以直接在您的Python代码中使用它们。

import cgi, cgitb
创建表单

我们先创建一个HTML表单,使得我们有一个用于处理的多部分表单数据样本。

<html>
<body>
   <h2>上传文件和附加参数</h2>
   <form enctype="multipart/form-data" action="upload.py" method="post">
      <p>文件: <input type="file" name="file" /></p>
      <p>名称: <input type="text" name="name" /></p>
      <br />
      <input type="submit" value="上传" />
   </form>
</body>
</html>
解析表单数据

要解析多部分表单数据,我们需要先创建FieldStorage,然后使用该对象来访问表单数据。该对象将通过HTML表单中的enctype属性来检测多部分数据并相应处理。

# 创建FieldStorage对象
form = cgi.FieldStorage()

# 获取文件名和文件内容
if form.getvalue('name'):
    name = form.getvalue('name')
else:
    name = '未知'

if 'file' in form:
    fileitem = form['file']
    
    # 检查文件是否上传
    if fileitem.filename:
        
        # 读取文件内容
        filecontent = fileitem.file.read()
        
        # 保存文件到制定路径
        open('/tmp/' + fileitem.filename, 'wb').write(filecontent)
        message = '文件已上传'
    else:
        message = '文件未上传'
else:
    message = '文件未上传'
显示结果

最后,我们将在HTML中向用户展示处理结果。

print('Content-type:text/html\r\n\r\n')
print('<html>')
print('<head>')
print('<title>文件上传演示</title>')
print('</head>')
print('<body>')
print('<p>{0}</p>'.format(message))
print('<ul>')
print('<li><strong>名字:</strong> {0}</li>'.format(name))
print('<li><strong>文件名:</strong> {0}</li>'.format(fileitem.filename))
print('<li><strong>文件内容:</strong></li>')
print('</ul>')
print('<pre>')
print(filecontent)
print('</pre>')
print('</body>')
print('</html>')

完整的Python脚本如下所示。

import cgi, cgitb

# 创建FieldStorage对象
form = cgi.FieldStorage()

# 获取文件名和文件内容
if form.getvalue('name'):
    name = form.getvalue('name')
else:
    name = '未知'

if 'file' in form:
    fileitem = form['file']
    
    # 检查文件是否上传
    if fileitem.filename:
        
        # 读取文件内容
        filecontent = fileitem.file.read()
        
        # 保存文件到制定路径
        open('/tmp/' + fileitem.filename, 'wb').write(filecontent)
        message = '文件已上传'
    else:
        message = '文件未上传'
else:
    message = '文件未上传'

# 显示处理结果
print('Content-type:text/html\r\n\r\n')
print('<html>')
print('<head>')
print('<title>文件上传演示</title>')
print('</head>')
print('<body>')
print('<p>{0}</p>'.format(message))
print('<ul>')
print('<li><strong>名字:</strong> {0}</li>'.format(name))
print('<li><strong>文件名:</strong> {0}</li>'.format(fileitem.filename))
print('<li><strong>文件内容:</strong></li>')
print('</ul>')
print('<pre>')
print(filecontent)
print('</pre>')
print('</body>')
print('</html>')
结论

这就是解码多部分表单数据 Python 的完整示范,通过这篇文章能让你在你的python开发工作中更加得心应手。