0

我正在尝试创建一个 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 页面上的提交后,它会将用户重定向到一个新页面,其中将显示调查结果。调查将在其他人可以投票的服务器上进行。

该页面如下所示:

克里斯保罗:(票数)
托尼帕克:(票数)等......

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

4

2 回答 2

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))
于 2013-06-13T06:37:42.313 回答
0

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

...乍一看,您的问题引发了更多问题:

  • 如何在“投票”表单和“结果”页面之间持久化数据?我不熟悉 Python CGI 模块的低级使用,但据我所知,您只需将数据存储在纯 Python 变量中,一旦脚本完成,这些变量就会消失。或者,如果我没记错的话,CGI 脚本只针对一个请求运行。
  • 您确定要进行重定向吗?如果是这样,您的“表单”处理 CGI 脚本只需响应相应的301302 http 状态代码。另一方面,您可能希望将投票结果显示为表单的“正常”响应?在这种情况下,只需在此处生成一个有效的 HTML 文档并返回一个200状态码。
  • 您将如何处理“意外”的表单数据?您不能信任传入的请求。并且可能已经伪造了一个请求,例如传送对“唐老鸭”的投票。您必须为此做好准备(顺便说一句,“9”对于您的表单字段来说是一个非常糟糕的非描述性名称......)
  • 这可以看作是一个问题(甚至没有问题),但是......嘿......我们在这里很专业!因此,您的 HTML 缺少“body”标签,并且没有正确使用。

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

于 2013-06-13T06:31:09.977 回答