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 的方式有问题,因为它没有通过。

它基本上是localhost/chris/complete?id=1

/chris/是一个文件夹,而 complete 是index.py中的一个函数

我是否以错误的方式格式化网址?

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["id"].value 以从 FieldStorage 获取项目的值。另一种选择是自己做,像这样:

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" )

因为这会将 None 分配给变量,如果键不在字典中。然后,您可以使用

if key is not None:
    do_stuff

成语(是的,我一般是空检查和防御性编程的粉丝......)。python 文档也提出了这些方面的建议。

在不深入研究代码的情况下,我认为您应该参考

form.get( 'id' ).value

为了提取您似乎要求的数据。

于 2008-12-21T11:32:46.927 回答