Найти - Пользователи
Полная версия: Запись формы в файл
Начало » Python для новичков » Запись формы в файл
1 2 3 4
truporez
Ну так вам и говорят: IndentationError
ulfur
truporez, погуглил, данная ошибка связана с отступами в коде. На мой неопытный взгляд все отступы расставлены правильно. Вот код write.cgi целиком:
#!/usr/bin/python
#-*- coding:utf-8 -*-
import cgi
form = cgi.FieldStorage()
print 'Content-Type: text/html; charset=utf-8'
print ''
print '<html>'
print ''
print '	<head>'
print ''
print '		<style type="text/css">'
print ''
print '			body'
print '			{'
print '				background-color: #FFFAE1;'
print '			}'
print ''
print '		</style>'
print ''
print '	</head>'
print ''
print '	<body>'
if ('surname' and 'firstname' and 'patronymic' and 'address' and 'phonenum') in form:
    surname = cgi.escape(form['surname'].value)
    firstname = cgi.escape(form['firstname'].value)
    patronymic =  cgi.escape(form['patronymic'].value)
    address = cgi.escape(form['address'].value)
    phone = cgi.escape(form['phonenum'].value)
    info = surname + ' ' + firstname + ' ' + patronymic + ' ' + address + ' ' + phone
    try:
    	f = open ('phonebook.dat', 'a+')
    	f.writelines (info)
    	f.close ()
        print '		<script type="application/javascript" src="/files/js/continueToAdd.js">'
        print '		</script>'
    except IOError:
        print '		<script type="application/javascript" src="/files/js/failedToAccessFile.js">'
        print '		</script>'
print '	</body>'
print ''
print '</html>'
truporez
Хм, выглядит нормально. Убедитесь, что используете для отступов либо табы либо пробелы, но не вместе. Обратите внимание на переводы строк, нет-ли ералаша там.
Ну и если ничего непоможет, добавьте пустую в конце файла.
ulfur
truporez, попробовал добавить пустую строку и в сам скрипт, и в файл для сохранения данных - безрезультатно. Скопировал файл phonebook.dat в каталог /tmp - IOError не возникает, обрабатывается фрагмент:
print '		<script type="application/javascript" src="/files/js/continueToAdd.js">'
print '		</script>'
и управление передается JavaScript-сценарию, который сообщает, что запись успешно добавлена и спрашивает, надо ли добавить ещё запись или нет. Если да, то редиректит на форму добавления, если нет - на главную. Но при этом файл /tmp/phonebook.dat пуст. Так и должно быть или где-то ошибка?
По отступам: использую только табы.
truporez
До записи дело не доходит. По мнению интерпретатора у Вас сам файл содержит ошибки форматирования. Киньте, что-ли, мне его в ящик, в архиве. Попробую помочь.
Либо заменить сами все табы на пробелы и возвраты каретки приведите к одному виду. Других идей нет.
ulfur
truporez, огромное спасибо! Высылаю Вам скрипт write.cgi. Вообще, это только часть работы, которая должна привести к результату: создать мини-сайт с функциями вывода, добавления, редактирования и удаления информации. Сейчас работаю над главной страницей, а к работе над добавлением информации вернусь утром.
truporez
Вот и спалились, молодой человек. :)
У вас там и пробелы и табы и табы с пробелами в одной строке.
Lexander
ulfur
По отступам: использую только табы.
Включите в редакторе отображение непечатных символов и все увидите сами.
ulfur
truporez, доброго времени суток! Запустил скрипт с Вашими исправлениями - та же история, при указании пути /tmp/phonebook.dat сообщается об успешной записи, при указании пути /var/www/html/files/txt/phonebook.dat - об ошибке, в обоих случаях файл остается пустым, хотя права на запись в него предоставлены всем. Вот фрагменты логов апача:
access_log
127.0.0.1 - - [13/Jan/2013:11:29:33 +0700] "POST /cgi-bin/write.cgi HTTP/1.1" 500 609 "http://localhost/cgi-bin/add.cgi" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
127.0.0.1 - - [13/Jan/2013:11:29:33 +0700] "GET /favicon.ico HTTP/1.1" 404 284 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/25.0.1349.2 Safari/537.21"
error_log
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1]   File ", referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] /var/www/cgi-bin/write.cgi, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] ", line , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] 41, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] print ' </body>', referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] ^, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] IndentationError, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] : , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] expected an indented block, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] , referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] Premature end of script headers: write.cgi, referer: http://localhost/cgi-bin/add.cgi
[Sun Jan 13 11:29:33 2013] [error] [client 127.0.0.1] File does not exist: /var/www/html/favicon.ico
truporez
У вас там и пробелы и табы и табы с пробелами в одной строке.
Если речь о табах в кавычках - то они используются исключительно для того, чтобы генерируемый HTML при просмотре исходного кода нормально читался (для каждого тега, вложенного в другой, отступ увеличивается; теги, вложенные в один тег, имеют одинаковый отступ).
Lexander, использую штатный текстовый редактор Midnight Commander, в нем вроде бы непечатные символы отображаются по умолчанию.
truporez
Теперь у вас такая-же ошибка в add.cgi. Речь о табах и пробелах в исходном коде, а не строках. Исправляйте, как вам посоветовали, включив отображение непечатных символов.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB