Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 12, 2013 11:41:07

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Запись формы в файл

Ну так вам и говорят: IndentationError



Офлайн

#2 Янв. 12, 2013 12:05:25

ulfur
Зарегистрирован: 2013-01-11
Сообщения: 14
Репутация: +  1  -
Профиль  

Запись формы в файл

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




Офлайн

#3 Янв. 12, 2013 12:20:11

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Запись формы в файл

Хм, выглядит нормально. Убедитесь, что используете для отступов либо табы либо пробелы, но не вместе. Обратите внимание на переводы строк, нет-ли ералаша там.
Ну и если ничего непоможет, добавьте пустую в конце файла.



Офлайн

#4 Янв. 12, 2013 12:39:57

ulfur
Зарегистрирован: 2013-01-11
Сообщения: 14
Репутация: +  1  -
Профиль  

Запись формы в файл

truporez, попробовал добавить пустую строку и в сам скрипт, и в файл для сохранения данных - безрезультатно. Скопировал файл phonebook.dat в каталог /tmp - IOError не возникает, обрабатывается фрагмент:

print '		<script type="application/javascript" src="/files/js/continueToAdd.js">'
print '		</script>'
и управление передается JavaScript-сценарию, который сообщает, что запись успешно добавлена и спрашивает, надо ли добавить ещё запись или нет. Если да, то редиректит на форму добавления, если нет - на главную. Но при этом файл /tmp/phonebook.dat пуст. Так и должно быть или где-то ошибка?
По отступам: использую только табы.




Офлайн

#5 Янв. 12, 2013 19:05:01

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Запись формы в файл

До записи дело не доходит. По мнению интерпретатора у Вас сам файл содержит ошибки форматирования. Киньте, что-ли, мне его в ящик, в архиве. Попробую помочь.
Либо заменить сами все табы на пробелы и возвраты каретки приведите к одному виду. Других идей нет.



Офлайн

#6 Янв. 12, 2013 20:11:21

ulfur
Зарегистрирован: 2013-01-11
Сообщения: 14
Репутация: +  1  -
Профиль  

Запись формы в файл

truporez, огромное спасибо! Высылаю Вам скрипт write.cgi. Вообще, это только часть работы, которая должна привести к результату: создать мини-сайт с функциями вывода, добавления, редактирования и удаления информации. Сейчас работаю над главной страницей, а к работе над добавлением информации вернусь утром.




Отредактировано ulfur (Янв. 12, 2013 20:12:00)

Офлайн

#7 Янв. 12, 2013 20:46:55

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Запись формы в файл

Вот и спалились, молодой человек. :)
У вас там и пробелы и табы и табы с пробелами в одной строке.



Офлайн

#8 Янв. 12, 2013 20:56:23

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Запись формы в файл

ulfur
По отступам: использую только табы.
Включите в редакторе отображение непечатных символов и все увидите сами.



Офлайн

#9 Янв. 13, 2013 06:55:51

ulfur
Зарегистрирован: 2013-01-11
Сообщения: 14
Репутация: +  1  -
Профиль  

Запись формы в файл

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




Офлайн

#10 Янв. 13, 2013 08:12:30

truporez
От:
Зарегистрирован: 2009-05-08
Сообщения: 266
Репутация: +  6  -
Профиль   Адрес электронной почты  

Запись формы в файл

Теперь у вас такая-же ошибка в add.cgi. Речь о табах и пробелах в исходном коде, а не строках. Исправляйте, как вам посоветовали, включив отображение непечатных символов.



Отредактировано truporez (Янв. 13, 2013 08:12:58)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version