[PYTHON] Démarrez un serveur Web en utilisant Bottle et Flask (j'ai également essayé d'utiliser Apache)

introduction

Maintenant que vous avez appris à démarrer un serveur Web en Python, je vais le publier pour la sortie. J'espère que cela sera utile à n'importe qui.

Dans cet article, nous ne couvrirons pas le module standard des bibliothèques http et le module ʻurllib, mais expliquerons en nous basant sur l'exemple de code en utilisant bottle et Flask. Il décrit également comment connecter ʻApache à un script Python.

environnement

WSGI Lors de l'étude du Web avec Python, le mot WSGI est souvent utilisé.

WSGI fait référence à une API standardisée entre les applications Web Python et les serveurs Web.

De nombreux frameworks et serveurs Web de Python utilisent WSGI. On dit que personne d'autre que le développeur du framework ou du serveur n'a besoin de savoir comment fonctionne WSGI lui-même.

Tous les frameworks dont je suis sur le point de discuter utilisent WSGI.

Bottle

Bottle est composé d'un seul fichier Python, il est donc très facile d'essayer et de le déployer.

Lorsque j'exécute le serveur Web avec le code suivant et que j'accède à http: // localhost: 9999 avec la méthode GET, il renvoie une réponse.

Installons Bottle comme préparation.

$ 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.

Allez sur http: // localhost: 9999. Avec le code d'état 200, «C'est ma page d'accueil» s'affiche sur le corps, et vous pouvez voir le contenu de la réponse. bottle1-api.png

Côté serveur, la sortie est la suivante.


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

À propos du code

Bottle utilise le décorateur @ route pour mapper l'URL à la fonction qui la suit immédiatement. Dans ce cas, le / est géré par la fonction myhome (). Cette fois, j'ai reçu la demande avec la méthode GET, Si vous spécifiez @ route (method = 'POST'), vous pouvez recevoir la requête par la méthode POST.

Exécutez le serveur Web avec la fonction run (). C'est facile à mettre en œuvre comme ça, donc c'est utile pour les tests.

Dans le code ci-dessus, je créais le texte dans le code, Vous pouvez également créer un fichier HTML et l'afficher dans votre navigateur.

Incorporer des fichiers HTML

Tout d'abord, préparez bottle2.py et index.html dans le même dossier.

Écrivez index.html comme suit.

index.html


It's my <b>new</b> home page

Écrivez bottle2.py comme suit.

bottle2.py



from bottle import route, run, static_file

@route('/')
def main():
    return static_file('index.html', root='.')

run(host='localhost', port=9999)

Démarrez maintenant le serveur.

$ python bottle2.py

Accédez à http: // localhost: 9999 avec un navigateur. bottle2-browser.png

À propos du code

En appelant la fonction static_file (), vous pouvez renvoyer ʻindex.html du répertoire courant indiqué par l'argument root` comme réponse.

Il existe diverses autres fonctions. Par exemple Vous pouvez également ajouter l'argument suivant à run ().

Vous pouvez également transmettre un argument à l'URL et utiliser la valeur transmise. Cela peut être réalisé avec le code suivant.

@route('/<thing>')
def main(thing):
    return f'{thing}'

Site développeur: https://bottlepy.org/docs/dev/

Flask

Flask est tout aussi facile à utiliser que Bottle.

Première installation.

pip install flask

Maintenant, préparez flask1.py. Comme une exigence

Ici, le répertoire par défaut des fichiers statiques Flask est static, donc les URL des fichiers de ce répertoire commencent également par / static.

flask1.py


from flask import Flask, render_template, request

app = Flask(__name__, static_folder='.', static_url_path='')

# http://localhost:9999/Que retourner en cas d'accès par
@app.route('/')
def myhome():

    return app.send_static_file('index.html')

@app.route('/sample/<thing>')
def echo(thing):

    return thing

# sample1/Recevoir les chaînes de requête suivantes sous forme d'arguments multiples
@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)

Ensuite, créez flak1.html. Créez un nouveau dossier appelé «templates». Enregistrez le code suivant en dessous.

flask1.html


<html>

<body>
    It's my <b>new</b> home page
    <br>{{ thing }}
    <br>{{ something }}
</body>

</html>

Après avoir démarré le serveur, si vous accédez à http: // localhost: 9999 / sample1 / $ thing = hello & something = world avec un navigateur, ce qui suit sera affiché. flask1-kwargs.png

Apache Ensuite, utilisons Apache HTTP Server pour intégrer le script Python.

Le module WSGI qui est particulièrement efficace sur le serveur Web Apache semble être mod_wsgi, alors utilisez ceci. (Citation: Premiers pas avec Python3)

Référence document officiel mod_wsgi

Ce module peut exécuter du code Python dans un processus Apache ou dans un processus distinct qui communique avec Apache.

Si votre système d'exploitation est autre que Windows, Apache est déjà inclus, mais si vous utilisez Windows, vous devez Télécharger. J'ai téléchargé httpd-2.4.41-win64-VS16.zips depuis Apache Lounge. Il y a Apache24 dans le fichier téléchargé, alors mettons-le directement sous c: (non requis)

Il y a deux manières d'utiliser mod_wsgi. Pour plus d'informations https://pypi.org/project/mod-wsgi/

Cette fois, nous utiliserons pip pour installer mod_wsgi.

$ pip install mod_wsgi

Ensuite, écrivez un script Python. Écrivez-le dans wsgi.py dans un endroit approprié comme suit. (Au fait, l'endroit est c: / var / www / test / wsgi.py)

wsgi.py



import bottle

application = bottle.default_app()


@bottle.route('/')
def home():
    return "apache ok"

Ensuite, allez dans c: \ Apache24 \ bin Entrez la commande mod_wsgi-express module-config. Cela vous permettra de voir l'emplacement du module. Ces informations sont nécessaires pour la configuration ʻApache` décrite ci-dessous.

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"

Ensuite, ajoutez ce qui suit à la fin du fichier C: \ Apache24 \ conf \ httpd.conf.

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>

Veuillez changer la description de LoadModule et WSGIPythonHome en vous référant à la sortie de mod_wsgi-express module-config. Laissez WSGIScriptAlias trouver le wsgi.py pertinent.

Une fois que vous avez fait cela, démarrez apache. Démarrez-le avec la commande httpd -k start dans le répertoire de travail de C: \ Apache24 \ bin.

Si vous accédez à http: // localhost: 80 avec votre navigateur, vous verrez ʻapache ok comme décrit dans wsgi.py`. apache.png

point important

La source a été améliorée selon la spécification WSGI par ʻapplication = bottle.default_app () . Par conséquent, la connexion externe n'est possible que si le code est créé selon les spécifications WSGI. De plus, si ʻapplication est changée en ʻapp, elle ne peut pas être lue. ** mod_wsgi recherche la variable ʻapplication pour connecter le serveur Web avec du code Python. ** **

Recommended Posts

Démarrez un serveur Web en utilisant Bottle et Flask (j'ai également essayé d'utiliser Apache)
J'ai essayé le web scraping en utilisant python et sélénium
Lancer un serveur Web avec Python et Flask
J'ai créé un exemple pour accéder à Salesforce en utilisant Python et Bottle
Je souhaite créer une application Web en utilisant React et Python flask
J'ai essayé d'obtenir les informations du Web en utilisant "Requests" et "lxml"
Créer une application Web avec Flask ②
Créer une application Web avec Flask ①
Créer une application Web avec Flask ④
J'ai essayé de créer une application todo en utilisant une bouteille avec python
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
J'ai essayé de jouer au jeu ○ ✕ en utilisant TensorFlow
J'ai essayé de dessiner une ligne en utilisant une tortue
J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 2: J'ai essayé d'utiliser PyEZ
J'ai créé une API Web
J'ai essayé d'utiliser pipenv, alors prenez note
J'ai essayé de comparer le cadre d'application Web
Créez un environnement CentOS Linux 8 avec Docker et démarrez Apache HTTP Server
J'ai essayé d'utiliser PyEZ et JSNAPy. Partie 1: Aperçu
J'ai essayé la détection d'objets en utilisant Python et OpenCV
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --2 introduction PHP
Source compilez Apache2.4 + PHP7.4 avec Raspberry Pi et créez un serveur Web ―― 1. Introduction à Apache
J'ai essayé d'exécuter Flask sur Raspberry Pi 3 Model B + en utilisant Nginx et uWSGI
Créer une carte Web en utilisant Python et GDAL
J'ai essayé d'utiliser Pythonect, un langage de programmation de flux de données.
J'ai essayé de lire un fichier CSV en utilisant Python
J'ai essayé d'utiliser Firebase pour le serveur de cache de Django
Source compilez Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web ―― 1. Introduction à Apache
J'ai essayé d'utiliser la base de données (sqlite3) avec kivy
J'ai créé un jeu ○ ✕ avec TensorFlow
Source compile Apache2.4 (httpd 2.4.43) + PHP7.4 sous Linux pour construire un serveur Web --2 introduction PHP
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
[Python + Bottle] J'ai publié un service Web qui visualise les tweets positionnés de Twitter.
Compilez Apache2.4 + PHP7.4 avec Raspberry Pi et construisez un serveur Web --3. Utilisez MySQL
Création d'une application Web qui mappe les informations sur les événements informatiques avec Vue et Flask
J'ai essayé d'utiliser google test et CMake en C
J'ai effectué un processus de connexion / déconnexion en utilisant Python's Bottle.
J'ai essayé d'héberger un exemple de modèle de Pytorch en utilisant TorchServe
Le débutant de la CTF a tenté de créer un serveur problématique (Web) [Problème]
J'ai essayé de lire les données d'un fichier en utilisant Node.js.
J'ai essayé d'utiliser Python (3) au lieu d'un calculateur de fonctions
Python: j'ai essayé menteur et honnête
Serveur HTTP et client HTTP utilisant Socket (+ navigateur Web) --Python3
J'ai essayé de dessiner un diagramme de configuration à l'aide de diagrammes
J'ai essayé d'utiliser argparse
J'ai essayé d'utiliser anytree
J'ai essayé d'utiliser aiomysql
J'ai essayé d'utiliser Summpy
J'ai essayé d'utiliser coturn
J'ai essayé d'utiliser "Anvil".
J'ai essayé d'utiliser Hubot
J'ai essayé d'utiliser ESPCN
J'ai essayé d'utiliser PyCaret
J'ai essayé d'utiliser cron
J'ai essayé d'utiliser ngrok
J'ai essayé d'utiliser face_recognition
Application Web utilisant Bottle (1)