【问题标题】:Making cgi.FieldStorage Store User Inputs?制作 cgi.FieldStorage 存储用户输入?
【发布时间】:2011-06-29 09:59:35
【问题描述】:

我写了一个简单的 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

每次执行此代码时都会重新生成数字,并且无法将用户输入与答案进行比较,因为 cgi.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 呢?我们该怎么做?

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

【问题讨论】:

标签: python session cgi


【解决方案1】:

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

我能想到的另一种方法是使用原始数字隐藏&lt;input&gt; 元素。这将与表单一起提交,并在form 中提供。老实说,这是一种糟糕的做事方式。它容易受到用户攻击,因此不安全。我知道这只是一个测试应用程序,但不妨从右脚开始:)

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多