Ich wollte IoT mit Rasperry pi machen, aber ich war in Schwierigkeiten, weil ich nicht viel Wissen über Web und Software hatte. Frameworks wie Django, Zope und Pyramid werden verwendet, um Webanwendungen in Python zu implementieren. Obwohl sie viele Funktionen haben, sind sie für Anfänger wie mich zu hoch.
Deshalb habe ich mich entschlossen, ein leichtes Python-Framework namens Bottle zu studieren. Das Framework passt in eine Datei, sodass Anfänger perfekt lernen können.
__ ◎ Zweck dieser Zeit __ Lernen Sie zunächst die grundlegende Verwendung von Bottle using Bottle in einer PC-Umgebung. Ein Memorandum bis zur Einrichtung eines Servers mit einem Anmeldeformular
__ ◎ Umgebung __ WSL Ubuntu 18.04.3 LTS
Flasche.py
herunter
1.2 FunktionsprüfungFlasche.py
herunterErstellen Sie zunächst ein Arbeitsverzeichnis.
$ mkdir bottle_test
$ cd bottle_test
Führen Sie den folgenden Befehl aus, um Flasche.py
herunterzuladen.
$ wget http://bottlepy.org/bottle.py
Überprüfen Sie den Betrieb mit Hello World. Erstellen Sie die folgende "index.py" in derselben Hierarchie wie "Flasche.py" (Flaschentest oben).
bottle_test/index.py
# -*- coding:utf-8 -*-
from bottle import route, run
@route('/hello')
def hello():
return "Hello world!"
run(host='localhost', port=8080, debug=True)
Dadurch wird der Webserver gestartet.
$ python3 index.py
Wenn Sie mit Ihrem Browser auf http: // localhost: 8080 / hello zugreifen, sollte "Hallo Welt!" Angezeigt werden. (Beenden Sie mit `` `Strg + c```)
Jetzt können Sie sehen, wie die Flasche funktioniert.
Mit Bottle können Sie eine Python-Funktion einer von einem Client (Browser) angeforderten URL zuordnen. Dies wird als Routing bezeichnet.
Wenn Sie beispielsweise folgenden Code verwenden und die URL "http: // xxxxx / hoge" anfordern, wird die Funktion hogehoge () ausgeführt und index.tpl (Inhalt ist HTML) im Ansichtsordner. Wird an den Client (Browser) gesendet.
Routing
@route('/hoge')
def hogehoge():
return template('view/index')
Versuchen Sie in der Tat die Kombination aus Routing-Funktion und HTML.
Schreiben Sie Flasche_test / index.py
wie folgt um und speichern Sie es. Erstellen Sie dann Flasche_test / view / index.tpl
.
bottle_test/index.py
# -*- coding:utf-8 -*-
from bottle import route, run, template
@route('/hello')
def hello():
return template('view/index')
run(host='localhost', port=8080, debug=True)
bottle_test/view/index.tpl
<html>
<head>
</head>
<body>
<p>Hello!</p>
</body>
</html>
Wenn Sie in diesem Zustand "index.py" ausführen und mit dem Browser des laufenden PCs auf http: // localhost: 8080 / hello zugreifen, sollte "Hallo!" Angezeigt werden.
run
ist übrigens ein Befehl zum Starten des WEB-Servers des Bottle-Frameworks. Wenn Sie es in "host =" 0.0.0.0 "ändern und ausführen, können Sie von Terminals im selben Netzwerk darauf zugreifen. In diesem Fall lautet die URL für den Zugriff "http: // PC IP address: 8080 / hello". Wenn Sie keine erfolgreiche Verbindung herstellen können, liegt dies wahrscheinlich daran, dass die Firewall Port 8080 nicht zulässt.
So ermöglichen Sie die Kommunikation mit der Portnummer in den Firewall-Einstellungen$ python3 index.py
Das, was ich gerade ausprobiert habe, heißt "statisches Routing".
Mit HTTP können Sie am Ende der vom Browser angeforderten URL einen Parameter hinzufügen, mit Bottle können Sie ihn jedoch als Funktionsargument verwenden. (Siehe das nächste Kapitel für HTTP)
Schreiben Sie Bottle_test / index.py
und Bottle_test / view / index.tpl
wie folgt um und speichern Sie sie.
bottle_test/index.py
# -*- coding:utf-8 -*-
from bottle import route, run, template
@route('/hello')
@route('/hello/<name>')
def hello(name = 'Leute, die es nicht wissen'):
return template('view/index', nm = name)
run(host='localhost', port=8080, debug=True)
bottle_test/view/index.tpl
<html>
<head>
</head>
<body>
<p>Hello!{{nm}}</p>
</body>
</html>
Wie in der folgenden Tabelle gezeigt, ändert sich das Anzeigeergebnis in Abhängigkeit von dem Parameter, der am Ende der URL hinzugefügt wird. Der Parameter am Ende der URL wird als Funktionsargument verwendet, und die durch das Argument ersetzte tpl-Datei mit {{nm}} wird im Browser angezeigt. Durch Setzen des Anfangswertes in der Variablen der Funktion kann auch die Operation angegeben werden, wenn am Ende kein Parameter vorhanden ist.
URL anzufordern | Ergebnis anzeigen |
---|---|
http://localhost:8080/hello | Hello!Leute, die es nicht wissen |
http://localhost:8080/hello/tanaka | Hello!tanaka |
http://localhost:8080/hello/12345 | Hello!12345 |
Der Inhalt von hier erforderte Kenntnisse in HTTP, also habe ich ein wenig studiert. Setze es leicht zusammen.
Das Hypertext Transfer Protocol (kurz HTTP) ist ein Kommunikationsprotokoll, das hauptsächlich von Webbrowsern zur Kommunikation mit Webservern verwendet wird und Mitglied der Internet Protocol Suite ist. Es wird zum Senden und Empfangen von Inhalten wie Webseiten verwendet, die in Text wie HTML geschrieben sind. Wikipedia
HTTP führt eine Anforderungs- / Antwortkommunikation durch den Server / Client durch. Ein Format, in dem der Webserver, der die Anforderung empfängt, die Daten als Antwort zurückgibt, wenn ein Client (Browser) eine Datenanforderung sendet.
Es gibt verschiedene Arten von Anforderungsmethoden, die die Clientseite (Browser) an die Serverseite sendet. Hier sind jedoch fünf häufig verwendete Methoden. Weitere Informationen finden Sie unter HTTP für Web-Anfänger.
① GET
Dies ist eine Anforderungsmethode zum Abrufen von URI-Daten und wird beim Abrufen von Daten wie HTML und Bildern verwendet.
Einfach ausgedrückt ist es eine Anfrage, "diese Seite zu senden".
Sie können zum Zeitpunkt der Anforderung auch Parameter an den Server senden, indem Sie nach dem von der GET-Methode angegebenen URI eine? + -Zeichenfolge hinzufügen. (Beispiel: http: // localhost: 8080 / index.html? Hoge = hoge
)
② POST Eine Methode, die Daten von der Client-Seite an die Server-Seite sendet. Die GET-Methode sendet die Parameter an den Server, indem sie die Parameter am Ende des URI schreibt. Dadurch werden die Parameter jedoch aus dem HTML-Formular gesendet. Die Anzahl der Datenbytes, die hier gesendet werden können, ist unbegrenzt. Es ist auch möglich, sehr wichtige Daten zu verschlüsseln und zu senden.
③ HEAD Eine Methode, um nur die Headerdaten des URI abzurufen. Die GET-Methode erfasst gleichzeitig auch den Datenkörper, die HEAD-Methode kann jedoch nur den Header-Teil der Daten erfassen (Datum und Uhrzeit der Datenaktualisierung sowie Datengröße).
④ PUT Eine Methode, die den Inhalt eines URI erstellt und ersetzt. Wenn die angegebene Ressource nicht vorhanden ist, wird eine neue erstellt, und wenn die angegebene Ressource vorhanden ist, wird sie aktualisiert. Der URI der von PUT erstellten Ressource wird vom Client (Browser) festgelegt.
⑤ DELETE Eine Methode, die den Inhalt des URI entfernt.
@ route
Wenn Sie es verwenden, ohne eine Option an den Dekorateur zu übergeben, wird es als Prozess für den Zugriff auf die GET-Methode behandelt. (Der gesamte in "2. Routing" beschriebene Quellcode beschreibt den Prozess für den Zugriff auf die GET-Methode.)
GET-Methode
#Mit der GET-Methode/hogehoge beim Zugriff hoge()Laufen
@route('/hoge') #Oder@get('/hoge')
def hogehoge():
return template('<b>Hello World</b>!')
Wenn andere Methoden als GET unterstützt werden, gibt es die folgenden zwei Beschreibungsmethoden. Im Folgenden wird gezeigt, wie am Beispiel der POST-Methode geschrieben wird.
① Übergeben Sie die Option an den Dekorator "@ route"
python
#Methode 1: @Übergeben Sie die Optionen an den Routendekorateur
#Mit der POST-Methode/hogehoge beim Zugriff hoge()Laufen
from bottle import route, run, template
@route('/hoge', method = 'POST')
def hogehoge():
return template('<b>Hello World</b>!')
② Verwenden Sie den der Methode entsprechenden Dekorator
python
#Methode 2:Verwenden Sie den der Methode entsprechenden Dekorateur
#Mit der POST-Methode/hogehoge beim Zugriff hoge()Laufen
from bottle import post, run, template
@post('/hoge')
def hogehoge():
return template('<b>Hello World</b>!')
__ Aufführen __
Methode | Methode ① | Methode ② |
---|---|---|
GET | @route('/hoge') |
@get('/hoge') |
POST | @route('/hoge', method = 'POST') |
@post('/hoge') |
PUT | @route('/hoge', method='PUT') |
@put('/hoge') |
DELETE | @route('/hoge', method='DELETE') |
@delete('/hoga') |
Sie können "Flasche.Anforderung" verwenden, um auf die Anfrage zuzugreifen, die Sie gerade bearbeiten.
from bottle import request
request.query
: Vom Client von der GET-Methode gesendete Parameter (Abfrageparameter)request.forms
: Vom Client mit der POST / PUT-Methode übermittelte Formularparameterrequest.url
: Zugriffs-URLrequest.files.get ('name')
: Angehängte DateiWeitere Informationen finden Sie unter Request / Response-Objekt der Master-Flasche.
Lassen Sie uns mit dem bisherigen Wissen ein Anmeldeformular erstellen.
Schreiben Sie Bottle_test / index.py
und Bottle_test / view / index.tpl
wie folgt um und speichern Sie sie.
bottle_test/index.py
# -*- coding:utf-8 -*-
from bottle import get, post, request, run, template
def check(password): #Login Urteil
if password == "abc":
return True
else:
return False
@get('/login') #Mit der GET-Methode/Was passiert, wenn Sie auf die Anmeldung zugreifen?
def login_form():
return '''
<form action = "/login" method = "post">
Username: <input name = "username" type = "text" />
Password: <input name = "password" type = "password" />
<input value = "Login" type = "submit"/>
</form>
'''
@post('/login')
def login():
#Zugriff auf POST-Informationen
name = request.forms.get('username')
pasw = request.forms.get('password')
#Beurteilung
if check(pasw):
return template('view/index', nm = name)
else:
return "<p>Login failed.</p>"
run(host='localhost', port=8080, debug=True)
bottle_test/view/index.tpl
<html>
<head>
</head>
<body>
<p>Hello!{{nm}}</p>
</body>
</html>
Führen Sie index.py
aus.
$ python3 index.py
Wenn Sie in diesem Zustand über Ihren Browser auf http: // localhost: 8080 / login zugreifen, wird der Anmeldebildschirm angezeigt.
Geben Sie einen geeigneten Benutzernamen und das festgelegte Passwort (abc) ein und drücken Sie "Login" und dann "Hallo!
Installation / Funktionsprüfung / Verwendung der Route: Pythons leichtes Webframework "Bottle" Grundlegende Verwendung von Bottle: Verwendung von Bottle, einem leichtgewichtigen Webserver für Python Flaschendetails: Pythons kleinstes Webframework Bottle.py Informationen zu HTTP: HTTP für Web-Anfänger Generieren von Bilddateilinks mit Bottle: Generieren Sie statische Dateilinks mit Pythons Bottle Framework Flaschenanforderung / -antwort: Master-Flaschenanforderungs- / Antwortobjekt (https://qiita.com/tomotaka_ito/items/62fc4d58d1be7867a158)
Recommended Posts