Httpout - это среда выполнения для файлов Python. Это позволяет вам выполнять свои сценарии Python из веб -URL, выход print() идет в ваш браузер.
Это классический способ развернуть ваши сценарии в Интернет. Вам просто нужно поместить свои обычные файлы .py , а также другие статические файлы в корне документа, и каждый будет отправлен из Интернета. Перезагрузка сервера не требуется!
Это обеспечивает нативный опыт работы с вашим сценарием из Интернета.
httpout назначит каждый маршрут, как /hello.py , либо /index.py с именем __main__ , и выполняет соответствующий файл в виде модуля в пуле потоков. Обезьяна исправления выполняется на уровне модуля путем захвата __import__ .
В перспективе подмодулей объект __main__ указывает на основной модуль, такой как /hello.py , вместо того, чтобы указывать на sys.modules['__main__'] или сам веб -сервер.
Httpout не выполняет кэш -механизм, такой как стандартный импорт или с помощью SYS.Modules, чтобы избежать конфликтов с другими модулями / запросами. Потому что каждый запрос должен иметь свое пространство имен.
Чтобы сохранить это проще, только основной модуль кэшируется (как объект кода). Кэш будет действительным во время HTTP Keep-Alive. Поэтому, если вы просто измените сценарий, нет необходимости перезагрузить серверный процесс, просто подождите, пока соединение не будет потеряно.
Имейте в виду, что это может не работать для запуска сложных сценариев Python, например, запустив другие серверные процессы или многопоточные приложения, поскольку каждый маршрут не является реальным основным потоком.
python3 -m pip install --upgrade httpout
# hello.py
import time
print ( '<pre>Hello...' )
time . sleep ( 1 )
print ( 'and' )
time . sleep ( 2 )
print ( 'Bye!</pre>' ) Поместите hello.py в examples/ папку, затем запустите сервер httpout с:
python3 -m httpout --port 8000 examples/
и ваш hello.py можно получить по адресу http: // localhost: 8000/hello.py. Если вы не хотите суффикс .py в URL, вы можете вместо этого создать папку hello/ index.py внутри.
Это обзор того, как просматривать методы запроса и прочитать данные формы.
# form.py
import sys
from httpout import wait , request , response
method_str = request . environ [ 'REQUEST_METHOD' ]
method_bytes = request . method
if method_str != 'POST' :
response . set_status ( 405 , 'Method Not Allowed' )
print ( 'Method Not Allowed' )
sys . exit ()
# we can't use await outside the async context
# so wait() is used here because request.form() is a coroutine object
form_data = wait ( request . form ())
print ( method_str , method_bytes , form_data )Это также может быть написано таким образом:
# form.py
import sys
from httpout import run , request , response
method_str = request . environ [ 'REQUEST_METHOD' ]
method_bytes = request . method
if method_str != 'POST' :
response . set_status ( 405 , 'Method Not Allowed' )
print ( 'Method Not Allowed' )
sys . exit ()
async def main ():
# using await instead of wait()
form_data = await request . form ()
print ( method_str , method_bytes , form_data )
run ( main ())Тогда вы можете сделать:
curl -d foo=bar http://localhost:8000/form.py
Httpout разработан, чтобы быть веселым. Это не построено для перфекционистов. httpout имеет:
print() S отправляется сразу же линейным, не ожидая, когда сценарий завершится, как типичный CGIif-else и print() делая свой сценарий портативным как для CLI, так и для ИнтернетаВажно отметить, что httpout фокусируется только на безопасности запроса; Для обеспечения того, чтобы проход по пути через URL никогда не происходит.
httpout никогда не будет проверять сценарий, который вы пишете, вы все равно можете получить доступ к таким объектам, как os , eval() , open() , даже проход из корня документа. Так что этот этап - ваша ответственность.
К вашему сведению, у PHP был что -то, называемое безопасным режимом, но он считался архитектурно неверным , поэтому они удалили его.
Режим Safe PHP-это попытка решить проблему безопасности общего сервера. Архитектурно неверно пытаться решить эту проблему на уровне PHP, но, поскольку альтернативы на веб -сервере и уровнях ОС не очень реалистичны, многие люди, особенно провайдеры, пока используют безопасный режим.
MIT Лицензия