Introduction et utilisation de la bouteille Python ・ Essayez de configurer un serveur Web simple avec une fonction de connexion

introduction

Je voulais faire de l'IoT avec Rasperry pi, mais j'étais en difficulté car je n'avais pas beaucoup de connaissances sur le Web et les logiciels. Les frameworks tels que Django, Zope et Pyramid sont utilisés pour implémenter des applications Web en Python, mais bien qu'ils aient de nombreuses fonctionnalités, ils sont de trop haut niveau pour les débutants comme moi.

J'ai donc décidé d'étudier un framework Python léger appelé Bottle. Le cadre tient dans un seul fichier, ce qui le rend parfait pour les débutants.

__ ◎ But de ce temps __ Tout d'abord, découvrez l'utilisation de base de Bottle en utilisant Bottle dans un environnement PC. Un mémorandum jusqu'à la mise en place d'un serveur avec un formulaire de connexion

__ ◎ Environnement __ WSL Ubuntu 18.04.3 LTS

Aperçu

  1. Présentation de la bouteille 1.1. Téléchargez bottle.py 1.2. Contrôle de fonctionnement
  2. Routage 2.1. Routage statique 2.2. Routage dynamique
  3. À propos de HTTP 3.1. Qu'est-ce que HTTP? 3.2. Méthode de requête HTTP
  4. Support de méthode en bouteille 4.1. Méthode GET 4.2. Méthodes autres que GET
  5. Objet de la demande
  6. Créez un formulaire de connexion

1. Présentation de la bouteille

1.1. Téléchargez bottle.py

Commencez par créer un répertoire de travail.

$ mkdir bottle_test
$ cd bottle_test

Exécutez la commande suivante pour télécharger bottle.py.

$ wget http://bottlepy.org/bottle.py

1.2. Contrôle de fonctionnement

Vérifiez le fonctionnement avec Hello world. Créez le ʻindex.py suivant dans la même hiérarchie que bottle.py` (Bottle_test dans ce qui précède).

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)

Cela lancera le serveur Web.

$ python3 index.py

Si vous accédez à http: // localhost: 8080 / hello avec votre navigateur, vous devriez voir "Hello world!". (Terminer par ctrl + c```)

kakunin.PNG

Vous pouvez maintenant voir comment fonctionne la bouteille.

2. Routage

Bottle vous permet d'associer une fonction python à une URL demandée par un client (navigateur). C'est ce qu'on appelle le routage.

Par exemple, en utilisant un code comme celui-ci, lorsque l'URL http: // xxxxx / hoge est demandée, la fonction hogehoge () sera exécutée et index.tpl (le contenu est HTML) dans le dossier de vue. Est envoyé au client (navigateur).

routage


@route('/hoge')
def hogehoge():
    return template('view/index')

2.1. Routage statique

En fait, essayez la combinaison de la fonction de routage et du html. Réécrivez Bottle_test / index.py comme suit et enregistrez-le, puis créez Bottle_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>

Dans cet état, si vous exécutez ʻindex.py` et accédez à http: // localhost: 8080 / hello avec le navigateur du PC en cours d'exécution, vous devriez voir "Hello!".

$ python3 index.py

Celui que je viens d'essayer s'appelle le «routage statique».

2.2. Routage dynamique

HTTP vous permet d'ajouter un paramètre à la fin de l'URL demandée par le navigateur, mais Bottle vous permet de le prendre comme argument de fonction. (Voir le chapitre suivant pour HTTP)

Réécrivez Bottle_test / index.py et Bottle_test / view / index.tpl comme suit et sauvegardez.

bottle_test/index.py


# -*- coding:utf-8 -*-

from bottle import route, run, template

@route('/hello')
@route('/hello/<name>')
def hello(name = 'les gens qui ne savent pas'):
    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>

Comme indiqué dans le tableau ci-dessous, le résultat d'affichage change en fonction du paramètre ajouté à la fin de l'URL. Le paramètre à la fin de l'URL est pris comme argument de fonction, et le fichier tpl avec {{nm}} remplacé par l'argument est affiché dans le navigateur. En définissant la valeur initiale dans la variable de la fonction, l'opération en l'absence de paramètre à la fin peut également être spécifiée.

URL à demander Afficher le résultat
http://localhost:8080/hello Hello!les gens qui ne savent pas
http://localhost:8080/hello/tanaka Hello!tanaka
http://localhost:8080/hello/12345 Hello!12345

3. À propos de HTTP

Le contenu d'ici nécessitait une connaissance de HTTP, j'ai donc étudié un peu. Assemblez-le légèrement.

3.1. Qu'est-ce que HTTP?

Le protocole de transfert hypertexte (HTTP en abrégé) est un protocole de communication principalement utilisé par les navigateurs Web pour communiquer avec les serveurs Web et est membre de l'Internet Protocol Suite. Il est utilisé pour envoyer et recevoir des contenus tels que des pages Web écrites dans du texte tel que HTML. Wikipédia

HTTP effectue une communication de demande / réponse par le serveur / client. Un format dans lequel lorsqu'un client (navigateur) envoie une demande de données, le serveur Web qui reçoit la demande renvoie les données en tant que réponse.

3.2. Méthode de requête HTTP

Il existe plusieurs types de méthodes de demande que le côté client (navigateur) envoie au côté serveur, mais voici cinq méthodes couramment utilisées. Pour plus d'informations, HTTP pour les débutants sur le Web

① GET Une méthode de demande pour récupérer des données URI, utilisée lors de la récupération de données telles que HTML et images. En termes simples, c'est une demande «d'envoyer cette page». Vous pouvez également envoyer des paramètres au serveur au moment de la demande en ajoutant une chaîne de caractères? + Après l'URI spécifié par la méthode GET. (Exemple: http: // localhost: 8080 / index.html? Hoge = hoge)

② POST Une méthode qui envoie des données du côté client vers le côté serveur. La méthode GET envoie le paramètre au serveur en écrivant le paramètre à la fin de l'URI, mais cela envoie le paramètre à partir du formulaire HTML. Il n'y a pas de limite au nombre d'octets de données qui peuvent être envoyés ici. Il est également possible de crypter et d'envoyer des données très importantes.

③ HEAD Une méthode pour obtenir uniquement les données d'en-tête de l'URI. La méthode GET acquiert également le corps des données en même temps, mais la méthode HEAD ne peut acquérir que la partie d'en-tête des données (date et heure de mise à jour des données et taille des données).

④ PUT Une méthode qui crée et remplace le contenu d'un URI. Si la ressource spécifiée n'existe pas, une nouvelle est créée et si la ressource spécifiée existe, elle est mise à jour. L'URI de la ressource créée par PUT est déterminée par le côté client (navigateur).

⑤ DELETE Une méthode qui supprime le contenu de l'URI.

4. Support de méthode en bouteille

4.1. Méthode GET

@ route Si vous l'utilisez sans passer d'option au décorateur, il sera traité comme un processus d'accès à la méthode GET. (Tout le code source décrit dans «2. Routage» décrit le processus d'accès à la méthode GET.)

Méthode GET


#Avec la méthode GET/hogehoge lors de l'accès hoge()Courir

@route('/hoge')     #Ou@get('/hoge')
def hogehoge():
    return template('<b>Hello World</b>!')
    

4.2. Méthodes autres que GET

Lors de la prise en charge de méthodes autres que GET, il existe les deux méthodes de description suivantes. Ce qui suit montre comment écrire en utilisant la méthode POST comme exemple.

① Passez l'option au décorateur @ route

python


#Méthode 1: @transmettre les options au décorateur d'itinéraire
#Avec la méthode POST/hogehoge lors de l'accès hoge()Courir
from bottle import route, run, template

@route('/hoge', method = 'POST')
def hogehoge():
    return template('<b>Hello World</b>!')

② Utilisez le décorateur correspondant à la méthode

python


#Méthode 2:Utilisez le décorateur correspondant à la méthode
#Avec la méthode POST/hogehoge lors de l'accès hoge()Courir
from bottle import post, run, template

@post('/hoge')
def hogehoge():
    return template('<b>Hello World</b>!')

__ Liste __

Méthode Méthode ① Méthode ②
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. Objet de la demande

Vous pouvez utiliser bottle.request pour accéder à la demande que vous traitez actuellement.

from bottle import request

Pour plus de détails, Objet Requête / Réponse du Master Bottle

6. Créez un formulaire de connexion

Créons un formulaire de connexion en utilisant les connaissances jusqu'à présent.

Réécrivez Bottle_test / index.py et Bottle_test / view / index.tpl comme suit et sauvegardez.

bottle_test/index.py


# -*- coding:utf-8 -*-

from bottle import get, post, request, run, template

def check(password):    #Jugement de connexion
    if password == "abc":
        return True
    else:
        return False

@get('/login')  #Avec la méthode GET/Que se passe-t-il lorsque vous accédez à la connexion
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():
    #Accéder aux informations POSTÉES
    name = request.forms.get('username')
    pasw = request.forms.get('password')
    #Jugement
    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>

Exécutez ʻindex.py`.

$ python3 index.py

Si vous accédez à http: // localhost: 8080 / login à partir de votre navigateur dans cet état, l'écran de connexion s'affiche.

login.PNG

Entrez un nom d'utilisateur approprié et le mot de passe défini (abc) et appuyez sur Connexion, puis Bonjour! <Nom d'utilisateur saisi> Doit être affiché.

Le site que j'ai utilisé comme référence

Installation / Vérification du fonctionnement / Comment utiliser route: Framework Web léger de Python "Bottle" Utilisation de base de Bottle: Comment utiliser Bottle, un serveur Web léger pour Python Détails de la bouteille: Le plus petit framework Web de Python Bottle.py À propos de HTTP: HTTP pour les débutants sur le Web Générer des liens de fichiers image avec Bottle: Générer des liens de fichiers statiques avec le framework Bottle de Python Demande / réponse de bouteille: Objet de demande / réponse de bouteille principale (https://qiita.com/tomotaka_ito/items/62fc4d58d1be7867a158)

Recommended Posts

Introduction et utilisation de la bouteille Python ・ Essayez de configurer un serveur Web simple avec une fonction de connexion
[Vagrant] Configurer un serveur API simple avec python
Essayez d'ouvrir une sous-fenêtre avec PyQt5 et Python
Comment démarrer un serveur WEB simple qui peut exécuter des cgi de php et python
Envoyez du courrier avec mailx à un serveur SMTP factice configuré avec python.
Essayez de résoudre un problème défini de mathématiques au lycée avec Python
Configurer un serveur HTTPS simple avec Python 3
Configurer un serveur HTTPS simple avec asyncio
Démarrez un serveur Web Python simple avec Docker
Lancer un serveur Web avec Python et Flask
Configurer un serveur SMTP simple en Python
Mettez Docker dans Windows Home et exécutez un serveur Web simple avec Python
WEB grattage avec python et essayez de créer un nuage de mots à partir des critiques
[Python] Comment créer un environnement de serveur Web local avec SimpleHTTPServer et CGIHTTPServer
écran et écran partagé avec connexion python et ssh au serveur distant
Configurer un serveur Web avec CentOS7 + Anaconda + Django + Apache
[Introduction à AWS] Mémorandum de création d'un serveur Web sur AWS
Comment configurer un serveur SMTP simple qui peut être testé localement en Python
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
[Python] Une fonction simple pour trouver les coordonnées du centre d'un cercle
Configurer un serveur Samba avec Docker
[Python] Une application web rapide avec Bottle!
Définissez la fonction Lambda et laissez-la fonctionner avec les événements S3!
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Essayez de mettre en place un environnement de test Vim assez sérieusement (pour Python)
Hit une méthode d'une instance de classe avec l'API Web Python Bottle
Configurez un serveur Web local en 30 secondes en utilisant http.server en python 3
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Configurer un serveur SMTP factice avec Python et vérifier le fonctionnement de l'envoi depuis Action Mailer
Configurer un serveur local avec le téléchargement Go-File-
J'ai fait une application d'envoi de courrier simple avec tkinter de Python
Introduction à Tornado (1): Framework Web Python démarré avec Tornado
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --2 introduction PHP
Essayez de dessiner une courbe de vie avec python
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et créez un serveur Web ―― 1. Introduction à Apache
Configurez un serveur SMTP de test en Python.
Configurer un serveur local avec le téléchargement Go-File-
[CleanArchitecture avec Python] Appliquez CleanArchitecture à une API simple étape par étape, et essayez de comprendre "quel type de changement est fort" dans la base de code.
Comment configurer un serveur de développement local
[Introduction à Python] Utilisation de base des expressions lambda
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Une introduction au logiciel d'interface graphique de la plate-forme de classe fait avec Python / Tkinter! (Et de nombreux Try and Error)! (Au milieu de l'écriture)
Obtenez une grande quantité de données Twitter de Starba avec python et essayez l'analyse de données Partie 1
[Python3] Prenez une capture d'écran d'une page Web sur le serveur et recadrez-la davantage
Effectuez une recherche Twitter à partir de Python et essayez de générer des phrases avec la chaîne de Markov.
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
[Python] Introduction au scraping WEB | Résumé des méthodes pouvant être utilisées avec webdriver
Essayez de créer un site Web simple avec responder et sqlite3
Mémo connecté à HiveServer2 d'EMR avec python
Comment configurer un environnement Python à l'aide de pyenv
Configurer un serveur local simple sur votre Mac
Faisons un outil de veille de commande avec python
[Introduction à Python] Comment itérer avec la fonction range?
(Python) Essayez de développer une application Web en utilisant Django
Essayez le fonctionnement de la base de données avec Python et visualisez avec d3
[Chapitre 5] Introduction à Python avec 100 coups de traitement du langage
Essayez de créer un jeu simple avec Python 3 et iPhone