Nachdem Sie gelernt haben, wie Sie einen Webserver in Python starten, werde ich ihn zur Ausgabe veröffentlichen. Ich hoffe, es wird jedem helfen.
Dieser Artikel behandelt nicht die Standardbibliotheken "http" -Modul und "urllib" -Modul, sondern erklärt anhand des Beispielcodes "Flasche" und "Flasche". Außerdem wird beschrieben, wie Sie "Apache" mit einem Python-Skript verbinden.
WSGI Beim Studium des Web mit Python wird häufig das Wort WSGI verwendet.
WSGI bezieht sich auf eine standardisierte API zwischen Python-Webanwendungen und Webservern.
Viele der Python-Webframeworks und Webserver verwenden WSGI. Es wird gesagt, dass niemand außer den Entwicklern des Frameworks und des Servers unbedingt wissen muss, wie WSGI selbst funktioniert.
Alle Frameworks, über die ich sprechen werde, verwenden WSGI.
Bottle
Die Flasche besteht aus nur einer Python-Datei, daher ist es sehr einfach zu versuchen, sie bereitzustellen.
Wenn ich den Webserver mit dem folgenden Code ausführe und mit der GET-Methode auf "http: // localhost: 9999" zugreife, wird eine Antwort zurückgegeben.
Lassen Sie uns Bottle als Vorbereitung installieren.
$ 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.
Gehen Sie zu "http: // localhost: 9999". Mit dem Statuscode 200 zeigt der Text "Es ist meine Homepage" an und Sie können sehen, wie die Antwort lautet.
Auf der Serverseite lautet die Ausgabe wie folgt.
127.0.0.1 - - [17/Dec/2019 08:30:39] "GET / HTTP/1.1" 200 17
Bottle verwendet den Dekorator "@ route", um die URL der unmittelbar darauf folgenden Funktion zuzuordnen.
In diesem Fall wird das /
von der Funktion myhome ()
behandelt. Diesmal erhielt ich die Anfrage mit der GET-Methode,
Wenn Sie "@ route (method =" POST ") angeben, können Sie die Anforderung über die POST-Methode empfangen.
Führen Sie den Webserver mit der Funktion run ()
aus.
Es ist einfach so zu implementieren, daher ist es nützlich zum Testen.
Im obigen Code habe ich den Text im Code erstellt. Sie können auch eine HTML-Datei erstellen und in Ihrem Browser anzeigen.
Bereiten Sie zuerst Flasche2.py und Index.html im selben Ordner vor.
Schreiben Sie index.html wie folgt.
index.html
It's my <b>new</b> home page
Schreiben Sie Flasche2.py wie folgt.
bottle2.py
from bottle import route, run, static_file
@route('/')
def main():
return static_file('index.html', root='.')
run(host='localhost', port=9999)
Starten Sie nun den Server.
$ python bottle2.py
Greifen Sie mit einem Browser auf http: // localhost: 9999
zu.
Durch Aufrufen der Funktion static_file ()
können Sie die index.html
des aktuellen Verzeichnisses zurückgeben, das durch das Argument root
als Antwort angegeben wird.
Es gibt verschiedene andere Funktionen.
Zum Beispiel
Sie können run ()
auch das folgende Argument hinzufügen.
debug = True
: Eine Debug-Seite wird erstellt, wenn ein HTTP-Fehler zurückgegeben wird. (Nicht auf einem Webserver einstellen, der zu Hause arbeitet.)reloader = True
: Die Seite wird im Browser neu geladen, wenn Sie Änderungen an Ihrem Python-Code vornehmen.Sie können der URL auch ein Argument übergeben und den übergebenen Wert verwenden. Dies kann mit dem folgenden Code erreicht werden.
@route('/<thing>')
def main(thing):
return f'{thing}'
Entwicklerseite: https://bottlepy.org/docs/dev/
Flask
Der Kolben ist genauso einfach zu bedienen wie die Flasche.
Zuerst installieren.
pip install flask
Bereiten Sie nun flask1.py vor. Voraussetzung
/ sample / some
"zugreifen, zeigen wir" some "im Browser mit" some "als Argumentwert an. / sample1? Ding = hallo & etwas = Welt
"zugreifen, binden wir den in der Abfragezeichenfolge angegebenen Wert in flask1.html
ein und zeigen ihn an.Hier ist das Standardverzeichnis für statische Flask-Dateien "statisch", daher beginnen URLs für Dateien in diesem Verzeichnis auch mit "/ static".
flask1.py
from flask import Flask, render_template, request
app = Flask(__name__, static_folder='.', static_url_path='')
# http://localhost:9999/Was soll zurückgegeben werden, wenn auf zugegriffen wird?
@app.route('/')
def myhome():
return app.send_static_file('index.html')
@app.route('/sample/<thing>')
def echo(thing):
return thing
# sample1/Empfangen Sie nachfolgende Abfragezeichenfolgen als mehrere Argumente
@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)
Als nächstes erstellen Sie flak1.html. Erstellen Sie einen neuen Ordner mit dem Namen "Vorlagen". Speichern Sie den folgenden Code darunter.
flask1.html
<html>
<body>
It's my <b>new</b> home page
<br>{{ thing }}
<br>{{ something }}
</body>
</html>
Wenn Sie nach dem Starten des Servers mit einem Browser auf "http: // localhost: 9999 / sample1 / $ thing = hallo & etwas = Welt" zugreifen, wird Folgendes angezeigt.
Apache Als Nächstes verwenden wir Apache HTTP Server, um das Python-Skript einzubetten.
Das beste WSGI-Modul auf dem Apache-Webserver scheint "mod_wsgi" zu sein. Verwenden Sie dies also. (Zitat: Erste Schritte Python3)
Referenz offizielles Dokument von mod_wsgi
Dieses Modul kann Python-Code in einem Apache-Prozess oder in einem separaten Prozess ausführen, der mit Apache kommuniziert.
Wenn Ihr Betriebssystem nicht Windows ist, ist Apache bereits enthalten. Wenn Sie jedoch Windows verwenden, müssen Sie Download ausführen.
Ich habe "httpd-2.4.41-win64-VS16.zips" von [Apache Lounge] heruntergeladen (http://httpd.apache.org/docs/current/platform/windows.html#page-header).
Die heruntergeladene Datei enthält Apache24. Fügen wir sie also direkt unter c:
ein (nicht erforderlich).
Es gibt zwei Möglichkeiten, mod_wsgi
zu verwenden.
Weitere Informationen finden Sie unter https://pypi.org/project/mod-wsgi/.
Dieses Mal werden wir pip
verwenden, um mod_wsgi
zu installieren.
$ pip install mod_wsgi
Schreiben Sie als Nächstes ein Python-Skript.
Schreiben Sie es wie folgt in wsgi.py
an einer geeigneten Stelle. (Der Ort ist übrigens "c: / var / www / test / wsgi.py")
wsgi.py
import bottle
application = bottle.default_app()
@bottle.route('/')
def home():
return "apache ok"
Gehen Sie dann zu c: \ Apache24 \ bin
Geben Sie den Befehl mod_wsgi-express module-config
ein. Auf diese Weise können Sie den Standort des Moduls anzeigen. Diese Informationen werden für die unten beschriebene Apache-Konfiguration benötigt.
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"
Fügen Sie als Nächstes Folgendes am Ende der Datei C: \ Apache24 \ conf \ httpd.conf
hinzu.
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>
Bitte ändern Sie die Beschreibung von "LoadModule" und "WSGIPythonHome" unter Bezugnahme auf die Ausgabe von "mod_wsgi-express module-config".
Lassen Sie WSGIScriptAlias
die relevante wsgi.py
finden.
Sobald Sie dies getan haben, starten Sie Apache. Starten Sie es mit dem Befehl "httpd -k start" im Arbeitsverzeichnis von "C: \ Apache24 \ bin".
Wenn Sie mit Ihrem Browser auf "http: // localhost: 80" zugreifen, wird "apache ok" angezeigt, wie in "wsgi.py" beschrieben.
Die Quelle wurde durch application = Bottle.default_app ()
auf die WSGI-Spezifikation verbessert. Daher ist eine externe Verbindung nur möglich, wenn der Code den WSGI-Spezifikationen entspricht. Wenn application
in app
geändert wird, kann es auch nicht gelesen werden.
** mod_wsgi
sucht nach der Variablen application
, um den Webserver mit Ihrem Python-Code zu verbinden. ** ** **
Recommended Posts