Maintenant que vous avez appris à démarrer un serveur Web en Python, je vais le publier pour la sortie. J'espère que cela sera utile à n'importe qui.
Dans cet article, nous ne couvrirons pas le module standard des bibliothèques http
et le module ʻurllib, mais expliquerons en nous basant sur l'exemple de code en utilisant
bottle et
Flask. Il décrit également comment connecter ʻApache
à un script Python.
WSGI Lors de l'étude du Web avec Python, le mot WSGI est souvent utilisé.
WSGI fait référence à une API standardisée entre les applications Web Python et les serveurs Web.
De nombreux frameworks et serveurs Web de Python utilisent WSGI. On dit que personne d'autre que le développeur du framework ou du serveur n'a besoin de savoir comment fonctionne WSGI lui-même.
Tous les frameworks dont je suis sur le point de discuter utilisent WSGI.
Bottle
Bottle est composé d'un seul fichier Python, il est donc très facile d'essayer et de le déployer.
Lorsque j'exécute le serveur Web avec le code suivant et que j'accède à http: // localhost: 9999
avec la méthode GET, il renvoie une réponse.
Installons Bottle comme préparation.
$ pip install bottle
bottle1.py
from bottle import route, run
@route('/')
def myhome():
return "It's my home page"
run(host='localhost', port=9999)
$ python bottle1.py
Bottle v0.12.18 server starting up (using WSGIRefServer())...
Listening on http://localhost:9999/
Hit Ctrl-C to quit.
Allez sur http: // localhost: 9999
.
Avec le code d'état 200, «C'est ma page d'accueil» s'affiche sur le corps, et vous pouvez voir le contenu de la réponse.
Côté serveur, la sortie est la suivante.
127.0.0.1 - - [17/Dec/2019 08:30:39] "GET / HTTP/1.1" 200 17
Bottle utilise le décorateur @ route
pour mapper l'URL à la fonction qui la suit immédiatement.
Dans ce cas, le /
est géré par la fonction myhome ()
. Cette fois, j'ai reçu la demande avec la méthode GET,
Si vous spécifiez @ route (method = 'POST')
, vous pouvez recevoir la requête par la méthode POST.
Exécutez le serveur Web avec la fonction run ()
.
C'est facile à mettre en œuvre comme ça, donc c'est utile pour les tests.
Dans le code ci-dessus, je créais le texte dans le code, Vous pouvez également créer un fichier HTML et l'afficher dans votre navigateur.
Tout d'abord, préparez bottle2.py et index.html dans le même dossier.
Écrivez index.html comme suit.
index.html
It's my <b>new</b> home page
Écrivez bottle2.py comme suit.
bottle2.py
from bottle import route, run, static_file
@route('/')
def main():
return static_file('index.html', root='.')
run(host='localhost', port=9999)
Démarrez maintenant le serveur.
$ python bottle2.py
Accédez à http: // localhost: 9999
avec un navigateur.
En appelant la fonction static_file ()
, vous pouvez renvoyer ʻindex.html du répertoire courant indiqué par l'argument
root` comme réponse.
Il existe diverses autres fonctions.
Par exemple
Vous pouvez également ajouter l'argument suivant à run ()
.
debug = True
: Une page de débogage est créée lorsqu'une erreur HTTP est renvoyée. (Ne pas configurer sur un serveur Web qui fonctionne à la maison.)reloader = True
: La page se recharge dans le navigateur lorsque vous modifiez votre code Python.Vous pouvez également transmettre un argument à l'URL et utiliser la valeur transmise. Cela peut être réalisé avec le code suivant.
@route('/<thing>')
def main(thing):
return f'{thing}'
Site développeur: https://bottlepy.org/docs/dev/
Flask
Flask est tout aussi facile à utiliser que Bottle.
Première installation.
pip install flask
Maintenant, préparez flask1.py. Comme une exigence
/ sample / some
", affichons" some "dans le navigateur avec" some "comme valeur d'argument. / sample1? Thing = hello & something = world
", intégrons la valeur spécifiée dans la chaîne de requête dans flask1.html
et affichons-la.Ici, le répertoire par défaut des fichiers statiques Flask est static
, donc les URL des fichiers de ce répertoire commencent également par / static
.
flask1.py
from flask import Flask, render_template, request
app = Flask(__name__, static_folder='.', static_url_path='')
# http://localhost:9999/Que retourner en cas d'accès par
@app.route('/')
def myhome():
return app.send_static_file('index.html')
@app.route('/sample/<thing>')
def echo(thing):
return thing
# sample1/Recevoir les chaînes de requête suivantes sous forme d'arguments multiples
@app.route('/sample1/')
def echo1():
kwargs = {}
kwargs['thing'] = request.args.get('thing')
kwargs['something'] = request.args.get('something')
return render_template('flask1.html', **kwargs)
app.run(host='localhost', port=9999, debug=True)
Ensuite, créez flak1.html. Créez un nouveau dossier appelé «templates». Enregistrez le code suivant en dessous.
flask1.html
<html>
<body>
It's my <b>new</b> home page
<br>{{ thing }}
<br>{{ something }}
</body>
</html>
Après avoir démarré le serveur, si vous accédez à http: // localhost: 9999 / sample1 / $ thing = hello & something = world
avec un navigateur, ce qui suit sera affiché.
Apache Ensuite, utilisons Apache HTTP Server pour intégrer le script Python.
Le module WSGI qui est particulièrement efficace sur le serveur Web Apache semble être mod_wsgi
, alors utilisez ceci. (Citation: Premiers pas avec Python3)
Référence document officiel mod_wsgi
Ce module peut exécuter du code Python dans un processus Apache ou dans un processus distinct qui communique avec Apache.
Si votre système d'exploitation est autre que Windows, Apache est déjà inclus, mais si vous utilisez Windows, vous devez Télécharger.
J'ai téléchargé httpd-2.4.41-win64-VS16.zips
depuis Apache Lounge.
Il y a Apache24 dans le fichier téléchargé, alors mettons-le directement sous c:
(non requis)
Il y a deux manières d'utiliser mod_wsgi
.
Pour plus d'informations https://pypi.org/project/mod-wsgi/
Cette fois, nous utiliserons pip
pour installer mod_wsgi
.
$ pip install mod_wsgi
Ensuite, écrivez un script Python.
Écrivez-le dans wsgi.py
dans un endroit approprié comme suit. (Au fait, l'endroit est c: / var / www / test / wsgi.py
)
wsgi.py
import bottle
application = bottle.default_app()
@bottle.route('/')
def home():
return "apache ok"
Ensuite, allez dans c: \ Apache24 \ bin
Entrez la commande mod_wsgi-express module-config
. Cela vous permettra de voir l'emplacement du module. Ces informations sont nécessaires pour la configuration ʻApache` décrite ci-dessous.
c:\Apache24\bin>mod_wsgi-express module-config
LoadFile "c:/users/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module "c:/users/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/appdata/local/programs/python/python37"
Ensuite, ajoutez ce qui suit à la fin du fichier C: \ Apache24 \ conf \ httpd.conf
.
httpd.conf
LoadModule wsgi_module "c:/users/appdata/local/programs/python/python37/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/users/appdata/local/programs/python/python37"
<VirtualHost *:80>
WSGIScriptAlias / c:/var/www/test/wsgi.py
<Directory "c:/var/www/test">
Require all granted
</Directory>
</VirtualHost>
Veuillez changer la description de LoadModule
et WSGIPythonHome
en vous référant à la sortie de mod_wsgi-express module-config
.
Laissez WSGIScriptAlias
trouver le wsgi.py
pertinent.
Une fois que vous avez fait cela, démarrez apache. Démarrez-le avec la commande httpd -k start
dans le répertoire de travail de C: \ Apache24 \ bin
.
Si vous accédez à http: // localhost: 80
avec votre navigateur, vous verrez ʻapache ok comme décrit dans
wsgi.py`.
La source a été améliorée selon la spécification WSGI par ʻapplication = bottle.default_app () . Par conséquent, la connexion externe n'est possible que si le code est créé selon les spécifications WSGI. De plus, si ʻapplication
est changée en ʻapp, elle ne peut pas être lue. **
mod_wsgi recherche la variable ʻapplication
pour connecter le serveur Web avec du code Python. ** **
Recommended Posts