我写了一个简单的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不存储该输入:
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怎么样?我们怎么做呢?
编辑:我真的不确定它是否是会话..我只需要一种方法来保持用户输入的内容,这样我就可以将他的答案与正确的答案进行比较
答案 0 :(得分:0)
你有几个选择。一个是beaker。它是一个WSGI中间件,旨在进行缓存和会话存储。不确定它如何与常规CGI应用程序集成,但不应该太难。这将接近PHP的session_start()
并将内容存储在$_SESSION
中。 Beaker有多种方法来存储会话信息(带有会话数据的cookie,带有会话ID的烹饪等)
我能想到的另一种方法是使用原始数字隐藏<input>
元素。这将与表单一起提交,并在form
中提供。说实话,这是做事的坏方法。它对用户攻击持开放态度,因此不安全。我知道这只是一个测试应用程序,但也可以从右脚开始:)