最近,我决定学习基本的Python CGI。最好的练习方法是在脑海中构建一个简单的项目,然后实现它。项目是这样的:我将生成一个表单,首先包含一个“输入类型文本”以获得成绩,然后两个“输入类型提交”,其中一个是“添加新成绩”,另一个是“计算” ...首先,用户将输入成绩,如果他提交计算,则成绩将转换为基础4 GPA。但只要他提交新的等级,新的“输入类型文本”将继续生成,并且他将输入他想要的多个等级,然后继续提交计算,这将返回基础4 GPA。好吧,至少这是我想要实现的目标。
我在Windows 10 PC上使用WAMP。
但我有两个问题。首先,我无法设置我的WAMP服务器来运行我写的脚本。这就是为什么我不能按预期工作的原因。我转到我的C:\wamp\bin\apache\apache2.4.23\conf
目录,在httpd.conf
文件中,我在适当的位置添加了行Options Indexes FollowSymLinks Multiviews ExecCGI
,并取消注释了行AddHandler cgi-script .cgi .py
。然后我将我的脚本放在目录C:\wamp\www\
中。但我的浏览器只是继续搜索,然后发出超时消息。
第二个问题是我怀疑代码是否会按预期工作,因为我不知道如何检查是否设置了任何“输入类型提交”。我的脚本完全如下:
#!C:\Users\Nima\AppData\Local\Programs\Python\Python36-32\Python.exe
import cgi
def convertNearestBase(point):
bases = [0.0, 0.3, 0.7, 1.0, 1.3, 1.7, 2.0, 2.3, 2.7, 3.0, 3.3, 3.7, 4.0]
minVal = 0.4
result = 0
for base in bases:
if minVal > abs(point - base):
minVal = abs(point - base)
result = base
return result
def convertSinglePoint(point):
transpoint = point/20 - 1
return convertNearestBase(transpoint)
i = 1
form = cgi.FieldStorage()
sumVal = convertSinglePoint(form.getvalue("point1"))
addNew = form.getvalue("addNew")
calc = form.getvalue("calculate")
print('Content-Type: text/plain\n\n')
print('<html><head><title>Online GPA Converter</title>')
print('<link rel="stylesheet" type="text/css" href="main.css" /></head>')
print('<body><h1>Online GPA Converter</h1><div class="container">')
print('<form method="post" action="">')
print('Enter point: <input type="number" name="point1" min="0" max="100" />')
print('<input type="submit" name="addNew" value="Add New" />')
while not calc:
if addNew:
i += 1
textEditName = "point" + str(i)
print('Enter point: <input type="number" name="{}" min="0" max="100" />'.format(textEditName))
print('<input type="submit" name="addNew" value="Add New" />')
point = form.getvalue(textEditName)
sumVal += convertSinglePoint(point)
print('<input type="submit" name="calculate" value="Calculate GPA" />')
print('</form></div>')
finalPoint = convertNearestBase(sumVal/i)
if calc:
print('<p>Your GPA is {}</p>'.format(finalPoint))
print('</body></html>')
我知道我要求太多,但我真的需要帮助。求你帮帮我。
答案 0 :(得分:0)