Ошибка при создании формы HTML с использованием Python-CGI - PullRequest
0 голосов
/ 20 июня 2010

Мне нужно создать форму HTML и получить данные, используя python-cgi. HTML-форма требует от пользователя ввода имени и фамилии, а затем сценарий python должен получить данные, сгенерированные в форме. Я прочитал учебные пособия и попытался поиграть с ним, чтобы он работал, но, похоже, этого не произошло. HTML код:

<form method = "POST" action ="http://localhost/cgi-bin/pyfile_test.py">
    <p>First Name: <input type="text" name="firstname">
    <p>Last Name: <input type="text" name="lastname">
    <p>Click here to submit the form:<input type="submit" value="Submit">
    <input type="hidden" name="session" value="1898fd">
    </form>

скрипт Python для извлечения данных

#!c:/Python26/python.exe -u

import cgi, cgitb
cgitb.enable()

def main()
    print "Content-type: text/html\n"
    print
    form = cgi.FieldStorage()
    if form.has_key("firstname") amd form["firstname"].value !="":
    print "<h1>Hello", form["firstname"].value, "</h1>"
    else:
    print "<h1> Error!Wrong!</h1>
main()

когда я направляю html-форму в скрипт выше, он НЕ работает, но когда я направляю его в следующий скрипт, он работает.

#!c:/Python26/python.exe -u

import cgi, cgitb
cgitb.enable()

print "Content-type: text/html"
print

print "The First Python Script On Server Side"
print "The sum of two numbers evaluation"
print "3+5 = ",3+5

Я не знаю, что происходит не так. Любая помощь будет высоко оценена!

1 Ответ

0 голосов
/ 20 июня 2010

По крайней мере в том, что вы только что показали, есть синтаксические ошибки:

if form.has_key("firstname") amd form["firstname"].value !="":
print "<h1>Hello", form["firstname"].value, "</h1>"
else:
print "<h1> Error!Wrong!</h1>

amd должно быть and, а оба оператора print должны иметь отступ глубже, чем ключевые слова if и else, которые их контролируют.

Если вы исправите свой синтаксис и попробуете снова, что именно вы видите в браузере (и что вы видите, если используете функцию браузера «show source»)?

Редактировать

Еще одна синтаксическая ошибка: вы пропускаете закрывающий " на втором print. Очень утомительно отслеживать все ваши синтаксические ошибки одну за другой, и Apache (или какой-либо другой веб-сервер), похоже, не помогает - cgitb не может взять управление под контроль, пока весь скрипт не будет успешно проанализирован, поэтому синтаксис ошибки - единственная причина, по которой он не может отображаться!

И еще: пропущенная двоеточие в конце строки def main.

Почему бы вам просто не запустить его с python yourscript.py в командной строке, пока не сделаете синтаксис без ошибок, и только затем попытаться снова запустить его как CGI?

например. после исправления двух ошибок, которые я обнаружил ранее, но не двух, которые я только что заметил, вы увидите (если python в PATH и приглашение оболочки $):

$ python acgi.py 
  File "acgi.py", line 6
    def main()
             ^
SyntaxError: invalid syntax

из-за отсутствия " в конце предыдущей строки и отсутствия двоеточия в строке 6.

Исправляя последние две ошибки (всего четыре в коде, который вы первоначально разместили), вы, наконец, видите:

$ python acgi.py 
Content-type: text/html


<h1> Error!Wrong!</h1>

конечно, он говорит «неправильно», потому что хранилище полей пусто, но это показывает, что вы можете СЕЙЧАС (с исправлением всех четырех ошибок) разумно попытаться запустить его как скрипт CGI наконец; -)

...