2017-06-11 5 views
0

最近、私は基本的な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>')

私はあまりにも多くを求めているが、私は本当に助けを必要と知っています。私を助けてください。

答えて

0

ニマは、CGIは実際に時代遅れの技術です。 2つの理由から:パフォーマンスと複雑さです。 CGIはあらゆる要求に対して新しいプロセスを生み出します。これはあまりにも多くのオーバーヘッドを加える。現代の代替手段はFastCGIです。しかし、それ自体はあまりにも低レベルです。 PythonでWebアプリケーションを書く方法を学びたいのであれば、現代のフレームワークから始める方がよいでしょう。私はフラスコを使うことを提案します。なぜなら、それは実際には最小限でシンプルですが、非常に強力でよく文書化されているからですまた、デバッグ目的に適したWebサーバーが組み込まれています。

+0

私はそれを実際のアプリケーションに使用するつもりはありません。私はちょうど学んでいます。ところで、私は数年前にジャンゴを試してみましたが、それは嫌いでした。しかし残念ながらあなたの投稿は質問に答えることができません。また、あなたはYandexで何を使用していますか?フラスコではない、そう? –

+0

Yandexには多くのワーキンググループがあり、さまざまなツールを使用しています。だから私はYandex全体について話すことはできない。しかし、私たちのプロダクションサービスのほとんどは、C++(バックエンド)やnode.js(私が知っているフロントエンドの一部)で書かれています。 Pythonは主にバックオフィスのタスクに使用されます。そしてはい、ここではフラスコを使用します。 –

+0

うわー、それは素晴らしいです! Yandexのために働くにはとてもクールでなければなりません。しかし、私は初心者ですから、あなたのようなマスターから私の質問に答えたいと思います。 –

関連する問題