0

URLを介してPythonページに情報を渡そうとしています。次のリンクテキストがあります。

"<a href='complete?id=%s'>" % (str(r[0]))

完全なページで、私はこれを持っています:

import cgi
def complete():
    form = cgi.FieldStorage()
    db = MySQLdb.connect(user="", passwd="", db="todo")
    c = db.cursor()
    c.execute("delete from tasks where id =" + str(form["id"]))
    return "<html><center>Task completed! Click <a href='/chris'>here</a> to go back!</center></html>"

問題は、ページ全体に移動すると、「id」でキーエラーが発生することです。誰かがこれを修正する方法を知っていますか?


私が実行すると編集cgi.test()しても何も得られません

URLが渡されないため、URLの使用方法に問題があると思います。

その基本的にlocalhost/chris / complete?id = 1

/ chris /はフォルダーであり、completeはindex.py内の関数です。

URLを間違った方法でフォーマットしていますか?

4

3 に答える 3

1

エラーは、でキーが見つからなかったことを意味しform["id"]ます。"id"cgi.FieldStorage()

呼び出されたURLに含まれるキーをテストするには、cgi.test()を使用します。

cgi.test()

メインプログラムとして使用できる堅牢なテストCGIスクリプト。最小限のHTTPヘッダーを書き込み、スクリプトに提供されるすべての情報をHTML形式でフォーマットします。

編集:基本的なテストスクリプト(Linuxパスでpython cgiモジュールを使用)はわずか3行です。システムで実行する方法を知っていることを確認してから、ブラウザから呼び出して、CGI側で引数が表示されることを確認してください。でトレースバックフォーマットを追加することもでき import cgitb; cgitb.enable()ます。

#!/usr/bin/python
import cgi
cgi.test()
于 2008-12-21T11:26:32.167 に答える
1

form の値を出力して、思ったとおりの結果が得られていることを確認しましたか? ただし、コードに少し問題があります... FieldStorage から項目の値を取得するには、form["id"].value を実行する必要があります。別の方法は、次のように自分で行うことです。

import os
import cgi

query_string = os.environ.get("QUERY_STRING", "")
form = cgi.parse_qs(query_string)

これにより、次のようになります。

{'id': ['123']}
于 2008-12-24T04:24:29.443 に答える
0

まず、次の方法で辞書を検索する必要があります

possibly_none = my_dict.get( "key_name" )

キーがdictにない場合、これは変数にNoneを割り当てるためです。その後、を使用することができます

if key is not None:
    do_stuff

イディオム(はい、私は一般的にnullチェックと防御プログラミングのファンです...)。Pythonのドキュメントは、これらの線に沿って何かを示唆しています。

コードを深く掘り下げずに、参照する必要があると思います

form.get( 'id' ).value

あなたが求めているように見えるデータを抽出するために。

于 2008-12-21T11:32:46.927 に答える