HTTPOUTは、Pythonファイルのランタイム環境です。これにより、Web URLからPythonスクリプトを実行することができます。Print print()出力はブラウザに送られます。
これは、スクリプトをWebに展開するための典型的な方法です。通常の.pyファイルとドキュメントルートに他の静的ファイルを配置するだけで、それぞれがWebからルーティング可能になります。サーバーのリロードは必要ありません!
スクリプトをWebから実行するためのネイティブエクスペリエンスを提供します。
httpoutは、 /hello.pyまたは/index.pyのようなすべてのルートを__main__に割り当て、スレッドプールのモジュールとして対応するファイルを実行します。モンキーパッチングは、 __import__をハイジャックすることにより、モジュールレベルで行われます。
サブモジュールの観点では、 __main__オブジェクトはsys.modules['__main__']またはWebサーバー自体を指すのではなく、 /hello.pyなどのメインモジュールを指しています。
httpoutは、他のモジュール /リクエストとの競合を回避するための標準インポートやsys.モジュールなどのキャッシュメカニズムを実行しません。各リクエストには独自の名前空間が必要なためです。
シンプルに保つために、メインモジュールのみがキャッシュされます(コードオブジェクトとして)。キャッシュは、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でアクセスできます。 URLに.pyサフィックスが必要ない場合は、代わりにindex.py内にhello/ folderを作成できます。
これは、リクエストメソッドを表示し、フォームデータを読み取る方法の概要です。
# 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()はすぐに線で送信されますif-elseとprint()実行して、CLIとWebの両方にスクリプトをポータブルにしますhttpoutはリクエストセキュリティにのみ焦点を当てていることに注意することが重要です。 URLを介したパス移動を確実に確認するためには、決して発生しません。
httpoutは、作成したスクリプトを検証することはありませんos 、 eval() 、 open()などのオブジェクトにアクセスすることもできます。したがって、この段階はあなたの責任です。
参考までに、PHPは以前はセーフモードと呼ばれるものを持っていましたが、建築的に間違っていると見なされていたため、削除しました。
PHPセーフモードは、共有サーバーセキュリティの問題を解決する試みです。 PHPレベルでこの問題を解決しようとするのはアーキテクチャでは間違っていますが、WebサーバーとOSレベルの代替案はそれほど現実的ではないため、多くの人、特にISPは今のところセーフモードを使用しています。
MITライセンス