Я пытаюсь передать информацию на страницу Python по URL-адресу. У меня есть следующий текст ссылки:
"<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-адрес, потому что он не проходит.
это в основном локальный / Крис / полный? id = 1
/Крис/ - это папка, а завершение - это функция внутри index.py
Я неправильно форматирую URL-адрес?
Кстати, при изменении состояния сервера (SQL DELETE) рекомендуется использовать POST (затем перенаправление), а не GET.
подробнее: theserverside.com/tt/articles/article.tss?l=RedirectAfterPos t






Ошибка означает, что form["id"] не удалось найти ключ "id" в cgi.FieldStorage().
Чтобы проверить, какие ключи находятся в вызываемом URL, используйте cgi.test ():
cgi.test()
Robust test CGI script, usable as main program. Writes minimal HTTP headers and formats all information provided to the script in HTML form.
Обновлено: базовый тестовый скрипт (с использованием модуля python cgi с путем Linux) составляет всего 3 строки. Убедитесь, что вы знаете, как запустить его в своей системе, затем вызовите его из браузера, чтобы убедиться, что аргументы отображаются на стороне CGI. Вы также можете добавить форматирование трассировки с import cgitb; cgitb.enable().
#!/usr/bin/python
import cgi
cgi.test()
Во-первых, вы должны выполнить поиск в словаре через
possibly_none = my_dict.get( "key_name" )
Потому что это присваивает переменной None, если ключ отсутствует в dict. Затем вы можете использовать
if key is not None:
do_stuff
идиома (да, я фанат нулевых проверок и вообще защитного программирования ...). Документация Python также предлагает что-то в этом роде.
Не вдаваясь в подробности кода, я думаю, вам стоит сослаться на
form.get( 'id' ).value
чтобы извлечь данные, которые вы, кажется, запрашиваете.
В документе показан пример cgi.FieldStorage (): если нет (form.has_key ("name") и form.has_key ("addr")): ...
form.get ('id') .value тоже не работает. Я получаю ошибку атрибута. Я думаю, что что-то не так с тем, как я использую URL-адрес, потому что он не проходит
чтобы увидеть, что передается, используйте cgi.test ()
Вы пробовали распечатать значение формы, чтобы убедиться, что вы получаете то, что, как вы думаете, получаете? Однако у вас есть небольшая проблема с вашим кодом ... вы должны выполнить form ["id"]. Value, чтобы получить значение элемента из FieldStorage. Другой вариант - сделать это самому, например:
import os
import cgi
query_string = os.environ.get("QUERY_STRING", "")
form = cgi.parse_qs(query_string)
В результате должно получиться что-то вроде этого:
{'id': ['123']}
Если ошибка возникает, когда какая-либо форма отправляет данные на страницу Complete, вам необходимо включить форму в свой вопрос. Похоже, что у него нет поля с именем id.