[PYTHON] Starten Sie einen Webserver mit Bottle and Flask (ich habe auch versucht, Apache zu verwenden)

Einführung

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.

Umgebung

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. bottle1-api.png

Auf der Serverseite lautet die Ausgabe wie folgt.


127.0.0.1 - - [17/Dec/2019 08:30:39] "GET / HTTP/1.1" 200 17

Über den Code

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.

HTML-Dateien einbetten

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. bottle2-browser.png

Über den Code

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.

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

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. flask1-kwargs.png

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. apache.png

wichtiger Punkt

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

Starten Sie einen Webserver mit Bottle and Flask (ich habe auch versucht, Apache zu verwenden)
Ich habe versucht, Web-Scraping mit Python und Selen
Starten Sie einen Webserver mit Python und Flask
Ich habe ein Beispiel für den Zugriff auf Salesforce mit Python und Bottle erstellt
Ich möchte eine Webanwendung mit React und Python Flask erstellen
Ich habe versucht, die Informationen des Webs mit "Requests" und "lxml" abzurufen.
Erstellen einer Webanwendung mit Flask ②
Erstellen einer Webanwendung mit Flask ①
Erstellen einer Webanwendung mit Flask ④
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
Ich habe Chatbot mit der LINE Messaging API und Python (2) ~ Server ~ erstellt
Ich habe versucht, ○ ✕ mit TensorFlow zu spielen
Ich habe versucht, mit einer Schildkröte eine Linie zu ziehen
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 2: Ich habe versucht, PyEZ zu verwenden
Ich habe eine Web-API erstellt
Ich habe versucht, pipenv zu verwenden, machen Sie sich also eine Notiz
Ich habe versucht, das Webanwendungs-Framework zu vergleichen
Erstellen Sie mit Docker eine CentOS Linux 8-Umgebung und starten Sie Apache HTTP Server
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 1: Übersicht
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --2 PHP Einführung
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver. 1. Apache-Einführung
Ich habe versucht, Flask auf Raspberry Pi 3 Model B + mit Nginx und uWSGI auszuführen
Erstellen Sie eine Webmap mit Python und GDAL
Ich habe versucht, Pythonect, eine Programmiersprache für den Datenfluss, zu verwenden.
Ich habe versucht, eine CSV-Datei mit Python zu lesen
Ich habe versucht, Firebase für Djangos Cache-Server zu verwenden
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers ―― 1. Einführung in Apache
Ich habe versucht, die Datenbank (sqlite3) mit kivy zu verwenden
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Quellkompilierung Apache2.4 (httpd 2.4.43) + PHP7.4 unter Linux zum Erstellen eines Webservers --2 PHP-Einführung
Ich habe versucht, das Update von "Werde ein Romanautor" mit "IFTTT" und "Werde ein Romanautor API" zu benachrichtigen.
[Python + Flasche] Ich habe einen Webdienst veröffentlicht, der die positionierten Tweets von Twitter visualisiert.
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --3. Verwenden Sie MySQL
Erstellt eine Web-App, die IT-Ereignisinformationen mit Vue und Flask abbildet
Ich habe versucht, Google Test und CMake in C zu verwenden
Ich habe einen Anmelde- / Abmeldevorgang mit Python's Bottle durchgeführt.
Ich habe versucht, ein Beispielmodell von Pytorch mit TorchServe zu hosten
CTF-Anfänger haben versucht, einen Problemserver (Web) zu erstellen [Problem]
Ich habe versucht, Daten aus einer Datei mit Node.js zu lesen.
Ich habe versucht, Python (3) anstelle eines Funktionsrechners zu verwenden
Python: Ich habe es mit Lügner und Ehrlichkeit versucht
HTTP-Server und HTTP-Client mit Socket (+ Webbrowser) - Python3
Ich habe versucht, ein Konfigurationsdiagramm mit Diagrammen zu zeichnen
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Webanwendung mit Flasche (1)