python cgi脚本接收表单数据

时间:2013-06-13 05:53:25

标签: python html forms cgi

我正在尝试创建一个python程序,它将从使用html的表单接收信息。
这就是我的html代码。

<html>
<head>
<title> NBA Survey! </title></head>
<form method = "POST" action = "result.py">
<hr>
Who do you think is the best Small Forward in the NBA right now? <br>
          <input type="radio" name="9" value="Chris Paul"> Chris Paul  <br>
            <input type="radio" name="9" value="Tony Parker"> Tony Parker <br>
            <input type="radio" name="9" value="Stephen Curry"> Stephen Curry <br>
            <input type="radio" name="9" value="Rajon Rondo"> Rajon Rondo <br>
            <input type="radio" name="9" value="Derrick Rose"> Derrick Rose <br>
            <input type="radio" name="9" value="Kyrie Irving"> Kyrie Irving <br>
            <input type="radio" name="9" value="Russell Westbrook"> Russell Westbrook <br>
            <input type="radio" name="9" value="Other"> Other <br>
    <input type="submit" name="submit" value="submit">
    </form>
    </body>
    </html>

对于python中的代码,这是我到目前为止所做的。

#!/usr/bin/python
import cgitb; cgitb.enable()
import cgi
import sys
form = cgi.FieldStorage()
if form.getvalue('9') = 'Chris Paul':
    f1.write('Chris Paul')
f2 = open('results.txt','a')
g2 = f2.read().split(',')
page += 'Chris Paul: ' + g2.count('Chris Paul')

我正在尝试创建一个python页面,在html页面上点击提交后,它会将用户重定向到一个新页面,其中将显示调查结果。该调查将在其他人可以投票的服务器上进行。

页面如下:

克里斯保罗:(投票数)
Tony Parker :(投票数) 等...

所有帮助将不胜感激。提前谢谢!

2 个答案:

答案 0 :(得分:0)

我认为在此处获取任何具体帮助之前,您必须缩小您的问题并进行更多个人研究。但...

......乍一看,你的问题 s 再提出一些问题 s

  • 如何在“投票”表单和“结果”页面之间保留数据?我不熟悉Python CGI模块的低级用法,但据我所知,你只是将数据存储在普通的Python变量中,一旦脚本完成就会消失。或者,如果我没有错,CGI脚本仅针对一个请求运行。
  • 您确定要进行重定向吗?如果是这样,您的“表单”处理CGI脚本只需要回复相应的301302 http状态代码。另一方面,您可能希望将轮询结果显示为表单的“正常”响应?在这种情况下,只需在此处生成一个有效的HTML文档,并使用200状态代码返回它。
  • 您将如何处理“意外”表单数据?您无法信任传入的请求。也许一个请求已被伪造,传递说,投票给“唐老鸭”。你必须为此做好准备(BTW,“9”是一个非常糟糕的非描述性名称,用于你的表格领域......)
  • 这可能会被视为次要问题(甚至没有问题),但是......嘿......我们在这里很专业!因此,您的HTML缺少“正文”标记并且没有正确用途。

还有一些工作要做!祝你好运。

答案 1 :(得分:0)

首先阅读Sylvain Leroux的回答。

#!/usr/bin/python
import cgitb; cgitb.enable()
import cgi
import sys
from collections import Counter

form = cgi.FieldStorage()

name = form.getvalue('9')
if name:
    with open('results.txt', 'a') as f:
        f.write(name + '\n')

print('Content-Type: text/plain\n')

with open('results.txt') as f:
    counts = Counter(line.strip() for line in f)

for name, count in counts.most_common():
    print('{}: {}'.format(name, count))