最近、私は基本的なPython CGIを学ぶことに決めました。練習する最善の方法は、私の頭の中で簡単なプロジェクトを作り、それを実装することでした。このプロジェクトは次のとおりです:私は最初に "入力タイプのテキスト"から成績を取得するフォームを生成し、次に2つの "入力タイプの提出"を作成します。その1つは "新しい成績の追加"ともう1つは "計算" ...最初にユーザはグレードを入力し、計算を提出するとグレードはベース4 GPAに変換されます。しかし、彼が新しい成績を追加して提出する限り、新しい「入力タイプのテキスト」が生成され続け、彼は望む数の成績を入力してから計算を提出します。ベース4 GPA。まあ、少なくとも私が達成したいと思ったものでした。Python CGIによる動的フォームデータ
私はWindows 10のPCでWAMPを使用しています。
しかし、私には2つの問題があります。 1つ目は、私が書いたスクリプトを実行するためにWAMPサーバーをセットアップできないということです。それが意図したとおりに動作するのであれば、私はそれをしません。私は自分のC:\wamp\bin\apache\apache2.4.23\conf
ディレクトリに行き、httpd.conf
ファイルに適切な場所にOptions Indexes FollowSymLinks Multiviews ExecCGI
という行を追加し、AddHandler cgi-script .cgi .py
という行のコメントを外しました。次に私のスクリプトをディレクトリC:\wamp\www\
に入れました。しかし、私のブラウザは検索を続けてからタイムアウトメッセージを出します。
第2の問題は、「入力タイプ」のいずれかが設定されているかどうかを確認する方法がわからないため、コードが意図したとおりに機能するかどうかが疑わしいことです。私のスクリプトは正確に以下の通りである:
#!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>')
私はあまりにも多くを求めているが、私は本当に助けを必要と知っています。私を助けてください。
私はそれを実際のアプリケーションに使用するつもりはありません。私はちょうど学んでいます。ところで、私は数年前にジャンゴを試してみましたが、それは嫌いでした。しかし残念ながらあなたの投稿は質問に答えることができません。また、あなたはYandexで何を使用していますか?フラスコではない、そう? –
Yandexには多くのワーキンググループがあり、さまざまなツールを使用しています。だから私はYandex全体について話すことはできない。しかし、私たちのプロダクションサービスのほとんどは、C++(バックエンド)やnode.js(私が知っているフロントエンドの一部)で書かれています。 Pythonは主にバックオフィスのタスクに使用されます。そしてはい、ここではフラスコを使用します。 –
うわー、それは素晴らしいです! Yandexのために働くにはとてもクールでなければなりません。しかし、私は初心者ですから、あなたのようなマスターから私の質問に答えたいと思います。 –