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
bottle.py
1.2. Contrôle de fonctionnementbottle.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
.
pip install bottle
ou wget
.$ wget http://bottlepy.org/bottle.py
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```)
Vous pouvez maintenant voir comment fonctionne la bouteille.
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')
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!".
run
est une commande pour démarrer le serveur WEB du framework Bottle. Si vous le changez en host = '0.0.0.0'
et que vous l'exécutez, vous pouvez y accéder à partir de terminaux du même réseau. Dans ce cas, l'URL à laquelle accéder est «http: // adresse IP du PC: 8080 / bonjour». Si vous ne parvenez pas à vous connecter, c'est probablement parce que le pare-feu n'autorise pas le port 8080.
Pour autoriser la communication du numéro de port dans les paramètres du pare-feu$ python3 index.py
Celui que je viens d'essayer s'appelle le «routage statique».
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 |
Le contenu d'ici nécessitait une connaissance de HTTP, j'ai donc étudié un peu. Assemblez-le légèrement.
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.
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.
@ 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>!')
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') |
Vous pouvez utiliser bottle.request
pour accéder à la demande que vous traitez actuellement.
from bottle import request
request.query
: Paramètres envoyés par le client par la méthode GET (paramètres de requête)request.forms
: paramètres de formulaire soumis par le client avec la méthode POST / PUTrequest.url
: URL consultéerequest.files.get ('name')
: Fichier jointPour plus de détails, Objet Requête / Réponse du Master Bottle
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.
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é.
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