Httpout est un environnement d'exécution pour les fichiers Python. Il vous permet d'exécuter vos scripts Python à partir d'une URL Web, la sortie print() va à votre navigateur.
C'est la façon classique de déployer vos scripts sur le Web. Il vous suffit de mettre vos fichiers .py réguliers ainsi que d'autres fichiers statiques dans la racine du document et chacun sera routable à partir du Web. Aucun rechargement de serveur n'est requis!
Il offre une expérience native pour exécuter votre script à partir du Web.
Httpout attribuera chaque itinéraire comme /hello.py ou /index.py avec le nom __main__ et exécute son fichier correspondant en tant que module dans un pool de threads. Le correctif de singe est effectué au niveau du module en détournant le __import__ .
Dans la perspective des sous-modules, l'objet __main__ pointe vers le module principal tel que /hello.py , plutôt que de pointer vers sys.modules['__main__'] ou le serveur Web lui-même.
HTTPOUT n'effectue pas de mécanisme de cache comme les importations standard ou avec des SYS.Modules pour éviter les conflits avec d'autres modules / demandes. Parce que chaque demande doit avoir son propre espace de noms.
Pour rester simple, seul le module principal est mis en cache (comme objet de code). Le cache sera valide pendant la main-d'œuvre HTTP. Donc, si vous changez simplement le script, il n'est pas nécessaire de recharger le processus du serveur, attendez simplement que la connexion soit perdue.
Gardez à l'esprit que cela peut ne pas fonctionner pour exécuter des scripts Python complexes, par exemple, exécuter d'autres processus de serveur ou des applications multithread car chaque itinéraire n'est pas un véritable thread principal.
python3 -m pip install --upgrade httpout
# hello.py
import time
print ( '<pre>Hello...' )
time . sleep ( 1 )
print ( 'and' )
time . sleep ( 2 )
print ( 'Bye!</pre>' ) Mettez hello.py dans le dossier examples/ , puis exécutez le serveur httpout avec:
python3 -m httpout --port 8000 examples/
Et votre hello.py est accessible sur http: // localhost: 8000 / hello.py. Si vous ne voulez pas le suffixe .py dans l'URL, vous pouvez plutôt créer un dossier hello/ avec index.py à l'intérieur.
Il s'agit d'un aperçu de la façon de visualiser les méthodes de demande et de lire les données de formulaire.
# 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 )Il peut également être écrit de cette façon:
# 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 ())Ensuite, vous pouvez faire:
curl -d foo=bar http://localhost:8000/form.py
Httpout est conçu pour être amusant. Il n'est pas construit pour les perfectionnistes. httpout a:
print() sont envoyées immédiatement en ligne sans attendre que le script se termine comme un CGI typiqueif-else et print() rendant votre script portable pour CLI et WebIl est important de noter que Httpout se concentre uniquement sur la sécurité des demandes; Pour garantir que la traversée de chemin à travers l'URL ne se produit jamais.
Httpout ne validera jamais le script que vous écrivez, vous pouvez toujours accéder à des objets comme os , eval() , open() , même la traversée hors de la racine du document. Donc, cette étape est de votre responsabilité.
Pour info, PHP avait quelque chose appelé mode sûr, mais il a été jugé architectural incorrect , ils l'ont donc retiré.
Le mode PHP Safe est une tentative de résolution du problème de sécurité du serveur partagé. Il est incorrect architectural d'essayer de résoudre ce problème au niveau PHP, mais comme les alternatives du serveur Web et les niveaux de système d'exploitation ne sont pas très réalistes, de nombreuses personnes, en particulier les FAI, utilisent le mode sans échec pour l'instant.
Licence MIT