Форум сайта python.su
truporez, открыл add.cgi в mcedit, смеси табов и пробелов нет (пробелами разделены операторы print и их аргументы, табы только внутри кавычек). Также открыл его в Notepad++ (под виндой), там включено отображение всех символов, включая отступы, переносы строки и прочие спецсимволы - переносы строки юниксовые, пробелы и табы не комбинируются. Сам скрипт add.cgi только генерирует страницу с формой для ввода данных, обработкой занимается write.cgi.
Код add.cgi
#!/usr/bin/python #-*- coding:utf-8 -*- import cgi print 'Content-Type: text/html; charset=utf-8' print '' print '<html>' print '' print ' <head>' print '' print ' <style type="text/css" media="all">' print '' print ' @import url(/files/stylesheet/style.css)' print '' print ' </style>' print '' print ' <title>Добавление записи</title>' print ' </head>' print '' print ' <body>' print '' print ' <div id=header>' print '' print ' <h1>Телефонная книга</h1>' print '' print ' </div>' print '' print ' <hr>' print '' print ' <div id=main>' print '' print ' <script type="application/javascript" src="/files/js/backToMainPageHandler.js">' print ' </script>' print '' print ' <form action="write.cgi" method="post">' print '' print ' <table align = center cellspacing=0 width="35%">' print '' print ' <caption><h4>Добавление новой записи в телефонную книгу</h4></caption>' print '' print ' <tr>' print '' print ' <td><span class="first_column_of_table">Фамилия</span></td>' print ' <td><textarea rows=1 cols=50 required name="surname"></textarea></td>' print '' print ' </tr>' print '' print ' <tr>' print '' print ' <td><span class="first_column_of_table">Имя</span></td>' print ' <td><textarea rows=1 cols=50 required name="firstname"></textarea></td>' print '' print ' </tr>' print '' print ' <tr>' print '' print ' <td><span class="first_column_of_table">Отчество</span></td>' print ' <td><textarea rows=1 cols=50 required name="patronymic"></textarea></td>' print '' print ' </tr>' print '' print ' <tr>' print '' print ' <td><span class="first_column_of_table">Адрес</span></td>' print ' <td><textarea rows=1 cols=50 required name="address"></textarea></td>' print '' print ' <tr>' print '' print ' <td><span class="first_column_of_table">Телефон</span></td>' print ' <td><textarea rows=1 cols=50 required name="phonenum"></textarea></td>' print '' print ' </tr>' print '' print ' <td><input type="submit" value="Добавить"></td>' print ' <td>' print ' <input type="reset" value="Очистить">' print ' <input type="button" value="На главную" id="backToMainPage">' print ' </td>' print '' print ' <tr>' print '' print ' </table>' print '' print ' </form>' print '' print ' <script type="application/javascript" src="/files/js/backToMainPage.js">' print ' </script>' print '' print ' </div>' print '' print ' <hr>' print '' print ' <div id=footer>' print '' print ' <a href="mailto:terminator@docsis.ru?subject=Вопрос или предложение по работе ресурса">Обратная связь</a>' print '' print ' </div>' print '' print ' </body>' print '' print '</html>'

Отредактировано ulfur (Янв. 13, 2013 09:47:17)
Прикреплённый файлы:
снимок79.png (51,1 KБ)
Офлайн
6
Красивый скриншот, эпохальный. Вы никогда не слышали о такой вещи как тройные кавычки?
Разберитесь, однако, с отступами по всем своим файлам. Сидеть с вами над каждой строкой у меня желания нет.
Офлайн
truporezНу так Python начал изучать недавно. Если я правильно понял, можно несколько print'ов заменить одним с тройными кавычками.
Вы никогда не слышали о такой вещи как тройные кавычки?
#!/usr/bin/python #-*- coding:utf-8 -*- import cgi print('Content-Type: text/html; charset=utf-8\n') print(""" <html> <head> <style type="text/css" media="all"> @import url(/files/stylesheet/style.css) </style> <title>Добавление записи</title> </head> <body> <div id=header> <h1>Телефонная книга</h1> </div> <hr> <div id=main> <script type="application/javascript" src="/files/js/backToMainPageHandler.js"> </script> <form action="write.cgi" method="post"> <table align = center cellspacing=0 width="35%"> <caption><h4>Добавление новой записи в телефонную книгу</h4></caption> <tr> <td><span class="first_column_of_table">Фамилия</span></td> <td><textarea rows=1 cols=50 required name="surname"></textarea></td> </tr> <tr> <td><span class="first_column_of_table">Имя</span></td> <td><textarea rows=1 cols=50 required name="firstname"></textarea></td> </tr> <tr> <td><span class="first_column_of_table">Отчество</span></td> <td><textarea rows=1 cols=50 required name="patronymic"></textarea></td> </tr> <tr> <td><span class="first_column_of_table">Адрес</span></td> <td><textarea rows=1 cols=50 required name="address"></textarea></td> <tr> <td><span class="first_column_of_table">Телефон</span></td> <td><textarea rows=1 cols=50 required name="phonenum"></textarea></td> </tr> <td><input type="submit" value="Добавить"></td> <td> <input type="reset" value="Очистить"> <input type="button" value="На главную" id="backToMainPage"> </td> <tr> </table> </form> <script type="application/javascript" src="/files/js/backToMainPage.js"> </script> </div> <hr> <div id=footer> <a href="mailto:terminator@docsis.ru?subject=Вопрос или предложение по работе ресурса">Обратная связь</a> </div> </body> </html> """)
#!/usr/bin/python #-*- coding:utf-8 -*- import cgi form = cgi.FieldStorage() print('Content-Type: text/html; charset=utf-8\n') print(""" <html> <head> <style type="text/css"> body { background-color: #FFFAE1; } </style> </head> <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 ('/tmp/phonebook.dat', 'a+') f.writelines (info) f.close () print(""" <script type="application/javascript" src="/files/js/continueToAdd.js"> </script> """) except IOError: print(""" <script type="application/javascript" src="/files/js/failedToAccessFile.js"> </script> """) print(""" </body> </html> """)

Отредактировано ulfur (Янв. 13, 2013 11:07:36)
Офлайн
Еще раз спасибо FishHook, DomainLider и truporez за участие в обсуждении и помощь. Источником проблем с записью был SELinux, который в RFRemix 17 (возможно, и в оригинальной Fedora 17) включен по умолчанию, т.е. проблема была не в коде. Дело в том, что по умолчанию SELinux запрещает демону httpd (т.е. апачу) производить запись в файлы (см. selinux.txt). Поэтому SELinux необходимо либо правильно настроить, либо отключить совсем, дабы не мешал. Если кто столкнется с такой же проблемой, вот решения:
sudo su semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/files/txt/phonebook.dat' restorecon -v '/var/www/html/files/txt/phonebook.dat' setsebool -P httpd_unified 1 reboot -f

Отредактировано ulfur (Дек. 29, 2013 06:51:32)
Прикреплённый файлы:
selinux.txt (3,5 KБ)
Офлайн
Поправка к предыдущему моему посту: в новых версиях Fedora/RFRemix (19.x/20.x) создание правил для апача может не работать (видимо, SELinux доработали, либо наоборот, добавили багов). Кроме того, новые версии SELinux конфликтуют с другими приложениями (например, Wine). Так что если на Вашем сервере установлена Fedora/RFRemix/CentOS/RHEL/Scientific Linux/другой дистр семейства Red Hat, Вам не нужны проблемы и у Вас есть права root - лучше отключить SELinux от греха подальше. Как - см. по ссылке в предыдущем посте.

Офлайн
0
народ, сегодня первый раз отрыл книгу по python (AByteofPython) и пытаюсь действовать по инструкциям: изменить функцию Path на компе, скачать сам Python, установить редактор, написать первую программу (Hello World) и запустить её. НО, почти ничего из этого не хочет получаться, хотя всё делаю так, как написано - из коммандной строки python не запускается + редактор не выполняет программу. скрины ниже.
буду очень признателен если объясните что я делаю не так ( на всякий случай винда стоит 8)
Прикреплённый файлы:
1.jpg (186,2 KБ)
Офлайн
0
ещё один
Прикреплённый файлы:
2.jpg (42,8 KБ)
Офлайн
33
yurik
ещё один
Отредактировано Budulianin (Янв. 2, 2014 01:18:29)
Офлайн
568
yurik,
и при чем тут этот топик? У его автора вроде нет проблем с установкой питона.
Вы что, не понимаете принципа устройства форума? Не понимаете, зачем нужны разделы, подразделы, подподподразделы, как их не называй?
Офлайн