Einführung und Verwendung der Python-Flasche ・ Versuchen Sie, einen einfachen Webserver mit Anmeldefunktion einzurichten

Einführung

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

Überblick

  1. Flasche vorstellen 1.1. Laden Sie Flasche.py herunter 1.2 Funktionsprüfung
  2. Routing 2.1 Statisches Routing 2.2 Dynamisches Routing
  3. Über HTTP 3.1 Was ist HTTP? 3.2. HTTP-Anforderungsmethode
  4. Methodenunterstützung in der Flasche 4.1. GET-Methode 4.2 Andere Methoden als GET
  5. Objekt anfordern
  6. Erstellen Sie ein Anmeldeformular

1. Flasche vorstellen

1.1. Laden Sie Flasche.py herunter

Erstellen 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

1.2 Funktionsprüfung

Ü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```)

kakunin.PNG

Jetzt können Sie sehen, wie die Flasche funktioniert.

2. Routing

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')

2.1 Statisches Routing

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.

$ python3 index.py

Das, was ich gerade ausprobiert habe, heißt "statisches Routing".

2.2 Dynamisches 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

3. Über HTTP

Der Inhalt von hier erforderte Kenntnisse in HTTP, also habe ich ein wenig studiert. Setze es leicht zusammen.

3.1 Was ist HTTP?

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.

3.2. HTTP-Anforderungsmethode

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.

4. Methodenunterstützung in der Flasche

4.1. GET-Methode

@ 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>!')
    

4.2 Andere Methoden als GET

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')

5. Objekt anfordern

Sie können "Flasche.Anforderung" verwenden, um auf die Anfrage zuzugreifen, die Sie gerade bearbeiten.

from bottle import request

Weitere Informationen finden Sie unter Request / Response-Objekt der Master-Flasche.

6. Erstellen Sie ein Anmeldeformular

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.

login.PNG

Geben Sie einen geeigneten Benutzernamen und das festgelegte Passwort (abc) ein und drücken Sie "Login" und dann "Hallo! " Sollte angezeigt werden.

Die Seite, die ich als Referenz verwendet habe

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

Einführung und Verwendung der Python-Flasche ・ Versuchen Sie, einen einfachen Webserver mit Anmeldefunktion einzurichten
[Vagrant] Richten Sie einen einfachen API-Server mit Python ein
Versuchen Sie, ein Unterfenster mit PyQt5 und Python zu öffnen
So starten Sie einen einfachen WEB-Server, der CGI von PHP und Python ausführen kann
Senden Sie E-Mails mit mailx an einen mit Python eingerichteten Dummy-SMTP-Server.
Versuchen Sie, ein festgelegtes Problem der High-School-Mathematik mit Python zu lösen
Richten Sie mit Python 3 einen einfachen HTTPS-Server ein
Richten Sie einen einfachen HTTPS-Server mit Asyncio ein
Starten Sie mit Docker einen einfachen Python-Webserver
Starten Sie einen Webserver mit Python und Flask
Richten Sie einen einfachen SMTP-Server in Python ein
Stellen Sie Docker in Windows Home und führen Sie einen einfachen Webserver mit Python aus
WEB Scraping mit Python und versuchen, aus Bewertungen eine Wortwolke zu machen
[Python] So erstellen Sie eine lokale Webserverumgebung mit SimpleHTTPServer und CGIHTTPServer
Bildschirm und geteilter Bildschirm mit Python- und SSH-Anmeldung am Remote-Server
Richten Sie einen Webserver mit CentOS7 + Anaconda + Django + Apache ein
[Einführung in AWS] Memorandum zum Erstellen eines Webservers auf AWS
So richten Sie einen einfachen SMTP-Server ein, der lokal in Python getestet werden kann
[Einführung in Python] So teilen Sie eine Zeichenfolge mit der Funktion split
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
Richten Sie mit Docker einen Samba-Server ein
[Python] Eine schnelle Webanwendung mit Bottle!
Stellen Sie die Lambda-Funktion ein und lassen Sie sie mit S3-Ereignissen arbeiten!
[Einführung in Python] So sortieren Sie den Inhalt einer Liste effizient mit Listensortierung
Versuchen Sie ernsthaft, eine Vim-Testumgebung einzurichten (für Python).
Treffen Sie eine Methode einer Klasseninstanz mit der Python Bottle Web API
Richten Sie mit http.server in Python 3 in 30 Sekunden einen lokalen Webserver ein
[Einführung in Python] So schreiben Sie eine Zeichenfolge mit der Formatierungsfunktion
Richten Sie mit Python einen Dummy-SMTP-Server ein und überprüfen Sie den Sendevorgang von Action Mailer
Richten Sie einen lokalen Server mit Go-File-Upload ein.
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Einführung in Tornado (1): Python Web Framework mit Tornado gestartet
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver --2 PHP Einführung
Versuchen Sie, mit Python eine Lebenskurve zu zeichnen
Quellkompilieren Sie Apache2.4 + PHP7.4 mit Raspberry Pi und erstellen Sie einen Webserver. 1. Apache-Einführung
Richten Sie einen Test-SMTP-Server in Python ein.
Richten Sie einen lokalen Server mit Go-File-Download ein.
[CleanArchitecture mit Python] Wenden Sie CleanArchitecture Schritt für Schritt auf eine einfache API an und versuchen Sie zu verstehen, welche Art von Änderung in der Codebasis stark ist.
So richten Sie einen lokalen Entwicklungsserver ein
[Einführung in Python] Grundlegende Verwendung von Lambda-Ausdrücken
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
Eine Einführung in die GUI-Software der Klassenplattform, die mit Python / Tkinter erstellt wurde! (Und viele Try and Error)! (Während des Schreibens)
Holen Sie sich mit Python eine große Menge von Starbas Twitter-Daten und probieren Sie die Datenanalyse Teil 1 aus
[Python3] Machen Sie einen Screenshot einer Webseite auf dem Server und schneiden Sie sie weiter zu
Führen Sie eine Twitter-Suche in Python durch und versuchen Sie, Sätze mit der Markov-Kette zu generieren.
[Mac] Ich möchte einen einfachen HTTP-Server erstellen, auf dem CGI mit Python ausgeführt wird
[Einführung in den Systemhandel] Ich habe einen Stochastic Oscillator mit Python gezeichnet und damit gespielt ♬
[Python] Einführung in das WEB-Scraping | Zusammenfassung der Methoden, die mit dem Webdriver verwendet werden können
Versuchen Sie, eine einfache Website mit Responder und sqlite3 zu erstellen
Memo mit Python mit HiveServer2 von EMR verbunden
So richten Sie eine Python-Umgebung mit pyenv ein
Richten Sie einen einfachen lokalen Server auf Ihrem Mac ein
Lassen Sie uns ein Befehls-Standby-Tool mit Python erstellen
[Einführung in Python] Wie iteriere ich mit der Bereichsfunktion?
(Python) Versuchen Sie, eine Webanwendung mit Django zu entwickeln
Probieren Sie die DB-Operation mit Python aus und visualisieren Sie sie mit d3
[Kapitel 5] Einführung in Python mit 100 Klopfen Sprachverarbeitung
Versuchen Sie, ein einfaches Spiel mit Python 3 und iPhone zu erstellen