2010-06-20 2 views
0

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

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

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

#!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() 

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

#!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 

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

+0

Как вы, по-видимому, начинающий Python, я бы прочитал книгу об общем программировании на Python, прежде чем пытаться погрузиться в веб-программирование (например, Dive in Python, Learning Python или Python для чайников). Кроме того, если бы я был вами, я бы использовал полную веб-инфраструктуру на основе WSGI, такую ​​как Django или Flask, в отличие от CGI. Программирование CGI - это боль (поверьте, я пробовал). Если вы используете фреймворк на основе WSGI, проще поддерживать * и * вы можете запускать приложение в других средах. CGI в значительной степени выходит в мир Python. И если CGI - единственное, что доступно, вы можете запускать приложения WSGI из сценария CGI. – LeafStorm

ответ

0

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

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 ключевых слов, которые управляют ими.

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

Edit:

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

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

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

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

$ 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 наконец ;-)

+0

Я получаю следующее сообщение об ошибке (после исправления синтаксиса): Ошибка внутреннего сервера Сервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос. Пожалуйста, свяжитесь с администратором сервера, [email protected] и сообщите им о времени возникновения ошибки и все, что вы могли бы сделать, что могло привести к ошибке. Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера. – shubster

+0

@shubster, еще две синтаксические ошибки (всего четыре в коде, который вы изначально разместили), см. Раздел «Редактирование моего ответа». Фиксирование всех четырех синтаксических ошибок должно в конечном итоге позволить запустить. Также в моем Редактировании A вы увидите объяснение, почему я знал, что они должны быть _syntax_ ошибками (иначе cgitb, будучи включенным, мог бы показать вам трассировку) и как диагностировать синтаксическую ошибку в вашем скрипте CGI, запустив ее как ** нормальный ** сценарий в командной строке (так как ваш сервер не помогает отображать трассировки ошибок ;-). –

Смежные вопросы