制作cgi.FieldStorage存储用户输入?

时间:2011-04-15 15:53:48

标签: python session cgi

我写了一个简单的Python CGI脚本,但它有一个错误:

#!/usr/bin/python2.7

import cgi,sys,random

sys.stderr = sys.stdout

num1 = random.randrange(1,11)
num2 = random.randrange(1,11)
answer = num1 + num2

print("Content-type: text/html\n")
print("<code>%d + %d :</code>") % (num1,num2)
print("""
<form method=POST action="">
<hr>
<th align=right>
<code><b>Answer:</b></code>
<input type=text name="answer">
<tr>""")

form = cgi.FieldStorage()

try:
    if form["answer"].value == str(answer):
        print "<br><b>Good</b>"
    else:
        print "<br><b>Wrong</b>"

except KeyError:
    pass

每次执行此代码时,这些数字都会重新生成,并且无法将用户输入与c答相比较。因为fieldStorage不存储该输入:

enter image description here

PHP程序员使用“session_start()”来做我想做的事情:

<?php
//Start the session so we can store what the code actually is.
session_start();
$text = rand(1,11);
$_SESSION["answer"] = $answer;
.......
?>

Python怎么样?我们怎么做呢?

编辑:我真的不确定它是否是会话..我只需要一种方法来保持用户输入的内容,这样我就可以将他的答案与正确的答案进行比较

1 个答案:

答案 0 :(得分:0)

你有几个选择。一个是beaker。它是一个WSGI中间件,旨在进行缓存和会话存储。不确定它如何与常规CGI应用程序集成,但不应该太难。这将接近PHP的session_start()并将内容存储在$_SESSION中。 Beaker有多种方法来存储会话信息(带有会话数据的cookie,带有会话ID的烹饪等)

我能想到的另一种方法是使用原始数字隐藏<input>元素。这将与表单一起提交,并在form中提供。说实话,这是做事的坏方法。它对用户攻击持开放态度,因此不安全。我知道这只是一个测试应用程序,但也可以从右脚开始:)