LINUX.ORG.RU

Python3 Hello World в веб

 , , ,


0

2

Уважаемые разработчики на Python, подскажите пожалуйста, я уже 4-й день пытаюсь настроить простенький вывод Hello World на веб-морду, на локалхосте. ОС Debian 7, Python3, запустить пытаюсь через встроенный в Python http-cgi сервер.

Делаю по этой инструкции:
pythonworld(точка)ru/web/cgi-1.html

Запускаю сервер, из того каталога, где лежит файл hello.py, командой

python3 -m http.server --cgi


Сервер стартует, без ошибок.
Serving HTTP on 0.0.0.0 port 8000  

Открываю в браузере адрес 192.168.2.244:8000, все хорошо открывается, в консоли пишется:
192.168.2.244 - - [06/Nov/2015 14:55:03] "GET / HTTP/1.1" 200 


Пытаюсь открыть файл hello.py, он открывается, но как текстовик, т.е просто получаю его содержимое( Парва все выставлены правильно. Не знаю уже, в чем может быть дело, посоветуйте пожалуйста что-нибудь!

Содержимое hello.py
#!/usr/bin/env python3

print("Content-type: text/html")
print()
print("<h1>Hello world!</h1>")


Django или другой фреймворк пока ставить не хотелось бы.

Парва все выставлены правильно

покажи выхлоп ls -la.

ymn ★★★★★ ()

В питон2 на офтопике работает, если положить в папку cgi-bin/ и запускать CGIHTTPServer. Третьего под рукой нет.

ichi404 ()
Ответ на: комментарий от ichi404

На оффтопике в hello.py первая строка

#!/usr/bin/env python3

и запускают там для никсов
python3 -m http.server --cgi


Вирт. окружение env у меня тоже запущено.

Fess88 ()
Ответ на: комментарий от ymn

cgi# ls -la
итого 16
drwxrwxrwx 2 andrey roio 4096 ноя  6 14:38 .
drwxr-xr-x 5 root   root 4096 ноя  6 14:23 ..
-rwxrwxrwx 1 andrey roio   90 ноя  6 14:30 hello2.cgi
-rwxrwxrwx 1 andrey roio   364 ноя  6 14:38 hello.py

Fess88 ()

У меня работает:

http://127.0.0.1:8000/cgi-bin/index.py
.

А ты документацию читал?

anonymous ()
Ответ на: комментарий от Fess88

Нет, подскажи плиз, в чем у меня косяк

Создай директорию cgi-bin и положи в неё свой скрипт. Запусти сервер из родительской директории, которая содержит новую cgi-bin. Теперь просто иди в браузере по адресу: http://localhost:8000/cgi-bin/hello.py и всё заработает.

Да, ещё проверь, что твой скрипт исполняемый: chmod +x hello.py.

anonymous ()

Django или другой фреймворк пока ставить не хотелось бы.

Попробуй bottle. Весь фреймворк состоит из одного файла.

anonymous ()
Ответ на: комментарий от anonymous

Спасибо большое, заработало!!! Не думал, что он так строг к путям:)

А в bootle и прочих фреймворках- там получается веб-сервер встроен?

Fess88 ()
Ответ на: комментарий от Fess88

Да, встроен. Там вообще очень всё просто.

anonymous ()
Ответ на: комментарий от anonymous

Благодарю! Еще вопрос такой - мне нужно впоследствии делать запросы к БД MySql, и выводить результаты на веб-морду в локалке. РАньше все этот делал на PHP, веб-сервер Apache.

На Python чтобы реализовать вывод данных на веб-морду, использовать что лучше, заморочиться с настройкой Апача, или как проще?

Fess88 ()
Ответ на: комментарий от Fess88

Если для личного пользования, то можно и без апача. Ставь MySQL Connector для питона. В нормальном дистрибутиве должен быть в репозиториях.

По ссылке есть примеры использования и туториалы, но на инглише.

anonymous ()
Ответ на: комментарий от anonymous

Спасибо большое еще раз!

А если для примерно 30 пользователей, внутри локалки, имеет смысл настроить Апач+mod_wsgi?

Fess88 ()
Ответ на: комментарий от Fess88

А если для примерно 30 пользователей, внутри локалки, имеет смысл настроить Апач+mod_wsgi?

uwsgi сам прекрасно умеет обслуживать http и быстро отдавать статику.

A1 ()
Ответ на: комментарий от bismi

Waitress is pure-Python WSGI server with very acceptable performance.

Бгг. Практически ничем не отличается от http.server.

A1 ()
Ответ на: комментарий от bismi

На фоне uwsgi они оба в жопе. Тем и не отличимы.

A1 ()
Ответ на: комментарий от A1

uwsgi безусловно круче.

Но для 30 юзеров в локалке waitress вполне хватит, в отличие от сервера из стандартной библиотеки, потому что имеет более продвинутую архитектуру http://waitress.readthedocs.org/en/latest/design.html

Есть еще cherrypy, который вроде самый производительный из написанных на питоне.

bismi ()
Ответ на: комментарий от bismi

Uwsgi настраивается в связке с nginx, или для небольшой сети его одного будет достаточно, и для выдачи Cgi, и для статики?

Fess88 ()
Ответ на: комментарий от bismi

Если уж тянуть еще одну зависимость, то зачем себя ограничивать?

A1 ()

запустить пытаюсь через встроенный в Python http-cgi сервер

Apache
Nginx
Lighttpd

Зачем такое половое сношение с питоновским cgi-сервером?
Да он конечно хорош, но для cgi-site все таки стоит использовать нормальные веб-серверы. Тем более у всех них давно уже запилена поддержка cgi (и даже fastcgi).

SysoevDV ()
Ответ на: комментарий от Fess88

Uwsgi настраивается в связке с nginx, или для небольшой сети его одного будет достаточно

я выше написал что будет достаточно даже питоновского веб-сервера (waitress, cherrypy), так что я считаю что Uwsgi хватит, хотя поставить спереди nginx в любой момент, перед любым из выше перечисленных не вижу проблем.

Cgi

про CGI лучше забыть

bismi ()
Последнее исправление: bismi (всего исправлений: 1)
Ответ на: комментарий от bismi

Ставь nginx, а за ним либо uwsgi, либо gunicorn. Вообще gunicorn в принципе можно и без nginx'а, но nginx всё равно лишним не будет.

Писать веб-сервис на питоне с использованием CGI - моветон. Посмотри на flask и aiohttp, если джанга кажется большой. Bottle тоже вариант, если минимализм это цель.

// ой, ошибся адресатом, ну всем всё и так видно)

ei-grad ★★★★★ ()
Последнее исправление: ei-grad (всего исправлений: 1)
Ответ на: комментарий от Fess88

Ради 30 пользователей настройкой nginx можно не заморачиваться. nginx используют для отдачи статики чаще всего. А ещё как reverse http proxy. Ни то, ни другое тебе для нагрузки, которую могут создать 30 человек, не нужно.

Wizard_ ★★★★★ ()
Ответ на: комментарий от ei-grad

Спасибо всем за советы! Попробую Bottle тогда поставить, и его веб-сервером первое время обойтись!

bismi, почему писать веб-сервис на питоне с использованием CGI - моветон?

Ты имеешь в виду что на веб-морду данные все же лучше выводить с помощью фреймворка какого-либо, и не заморачиваться с настрйокой полноценного веб-сервера?

Fess88 ()
Ответ на: комментарий от Fess88

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

redixin ★★★★ ()

создай директорию cgi-bin и положи туда свой hello.py

ну и дай права +x

fMad ★★ ()
Ответ на: комментарий от redixin

Мне просто с MySQL базы нужно выводить результаты запроса на веб-морду, имеет ли смысл настраивать Apache+mod_wsgi, либо фреймворковским веб-сервером ограничиться?

Fess88 ()
Ответ на: комментарий от Fess88

Некоторые фреймверковские веб серверы пободрее апача будут. Как тут уже выше говорили, ты всегда можешь задеплоить свое приложение каким угодно способом. Никуда оно не убежит. И да, любой (кроме уж совсем однопоточных) сервер легко справится с тем что ты делаешь. Даже для встроенного SimpleServer есть ThrededMixin.

redixin ★★★★ ()
Ответ на: комментарий от Fess88

имеет ли смысл настраивать Apache+mod_wsgi

не имеет. возьми bottle(morepath) и пускай его под cherrypy(waitress)

тебе еще приложение надо написать, потом можешь перебирать все возможные варианты деплоя, а их реально дофига.

А перебирать сможешь потому что WSGI.

Если в какой-то момент понадобится apache, выкинешь cherrypy(waitress) и поставишь Apache+mod_wsgi

Можешь не брать bottle(morepath) и писать под WSGI, но это геморней, поэтому расплодилось фреймворков, чтобы убрать рутину, но вкусы и опыт у всех разные.

P.S. Все современные питон веб-фреймворки позвроляют создать WSGI-приложение (специальная функция)

P.P.S. Все современные веб-серверы (при помощи плагина) и питон веб-серверы напрямую позволяют вызвать WSGI-приложение (вызвать ту самую функцию по приходу реквеста)

bismi ()
Ответ на: комментарий от Fess88

Apache+mod_wsgi это тоже говно мамонта. Современный Python-стек это Nginx + uwsgi/gunicorn. С ними всё гораздо проще и эффективнее. Вот например - http://habrahabr.ru/post/267097/, пункт 3 (nginx) не обязателен, но желателен.

ei-grad ★★★★★ ()
Ответ на: комментарий от Fess88

Ты уже поддастал мусолить, чо ты как баба? Берешь простой фреймворк, делаешь на встроенном сервере, не устраивает — пускаешь под uwsgi, не устраивает — добавляешь nginx. Сколько еще можно ездить по этой пластинке, как будто ты там ракеты считаешь.

A1 ()
Ответ на: комментарий от A1

:-D Тяжело после C++ дается эта настрйока рабочего окружения питоновского, сейчас вроде более-менее ясна все стало! Спасибо всем за советы!!!

Fess88 ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.