[PYTHON] Bequeme Nutzungsübersicht von Flask

flask ist eine Bibliothek zum Erstellen von Webanwendungen mit Python. Hier finden Sie eine Zusammenfassung der grundlegenden Methoden zur Verwendung des Kolbens.

Installation

pip install flask

Einführung

Erstellen Sie zunächst eine API, die die einfachste "Hallo Welt" zurückgibt.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def root():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

--Wenn Sie mit der Funktion "@ app.route (url)" dekorieren, wird die Funktion ausgeführt, wenn Sie auf die URL zugreifen.

python app.py

Durch Ausführen der oben erstellten app.py wird der Webserver gestartet. Wenn Sie mit Ihrem Browser auf "http: // localhost: 5000 /" zugreifen, wird "Hello World!" Auf dem Bildschirm angezeigt.

Entwicklungseinstellungen

from flask import Flask
app = Flask(__name__)

@app.route('/')
def root():
    return "Hello World!"

if __name__ == "__main__":
    app.run(debug=True,host='localhost',port=5000)

Machen Sie es von außen zugänglich.

from flask import Flask
app = Flask(__name__)

@app.route('/')
def root():
    return "Hello World!"

if __name__ == "__main__":
    app.run(debug=False,host='0.0.0.0',port=5000)

Gleichzeitig startet auch der Browser

import threading,webbrowser
from flask import Flask
app = Flask(__name__)

@app.route('/')
def root():
    return "Hello World!"

if __name__ == "__main__":
    threading.Timer(1.0, lambda: webbrowser.open('http://localhost:5000') ).start()
    app.run(debug=False)

Wenn Sie möchten, dass der Browser im Debug-Modus automatisch geöffnet wird (debug = True), ist main

if __name__ == "__main__":
    app.run(debug=True)

Und dann

!/bin/sh
( sleep 2; open http://localhost:5000/ ) &
python app.py

Es gibt eine Möglichkeit, ein Shell-Skript wie auszuführen.

Gibt eine HTML-Datei zurück

from flask import Flask,render_template
app = Flask(__name__)

@app.route('/')
def main():
    return render_template('index.html')

if __name__ == "__main__":
    app.run()
<html>
<body>
  Hello World!
</body>
</html>

--Verwenden Sie render_template (file), wenn Sie eine HTML-Datei zurückgeben. --Für die HTML-Datei (hier index.html) erstellen Sie ein Verzeichnis mit dem Namen templates am selben Speicherort wie app.py und legen Sie es in diesem Verzeichnis ab.

CSS / JavaScript-Datei

<head>
  <script src="/static/script.js"></script>
  <link rel="stylesheet" href="/static/style.css">
</head>

Rufen Sie an wie.

GET Anfrage

from flask import Flask,request,jsonify,render_template
app = Flask(__name__)

@app.route('/')
def index_html():
    return render_template('index.html')

@app.route('/get',methods=['GET'])
def get():
    return jsonify({'message':'Hello world!'})

if __name__ == '__main__':
    app.run()
<html>
<body>
  <button onclick='get();'>get</button>

  <script>
    function get(){
      fetch('/get').then(
        response => response.json()
      ).then(
        json => { document.body.innerHTML += JSON.stringify(json); }
      ).catch(
        e => console.error(e)
      );
    }
  </script>
</body>
</html>

Wenn Sie etwas tun möchten, wenn der Abruf erfolgreich sein soll, können Sie Folgendes tun.

fetch('/get').then(
  response => (
    if (response.ok){
 //成功時に行ないたい処理
    } else {
        throw new Error()
    }
  ).catch(
    e => console.error(e)
  );

POST-Anfrage

from flask import Flask,request,jsonify,render_template
app = Flask(__name__)

@app.route('/')
def index_html():
    return render_template('index.html')

@app.route('/post',methods=['POST'])
 def post (): # Gibt den gesendeten JSON so zurück, wie er ist.
    req = request.json
    return jsonify(req)

if __name__ == '__main__':
    app.run()

--JSON, das per POST-Anfrage gesendet wurde, kann unter request.json abgerufen werden.

<html>
<body>
<button onclick='post();'>post</button>

<script>
function post(){
  fetch('/post', {
    method: "POST",
    headers: { "Content-Type": "application/json"},
    body: JSON.stringify({"message": "Hello World!!!"})
  }).then(
    response => response.json()
  ).then(
    json => { document.body.innerHTML += JSON.stringify(json); }
  ).catch(
    e => console.error(e)
  );
}
</script>
</body>
</html>

--Hier, wenn Sie die Taste drücken, wird eine POST-Anfrage mit dem JSON "{'message': 'Hello World !!!'}" gesendet, wenn Daten gesendet werden. Der gleiche JSON wird zurückgegeben, zeigen Sie ihn also an.

API zur Rückgabe von Bilddaten

Stellen Sie sich eine API vor, bei der der Server die Daten empfängt, mit matplotlib ein Diagramm erstellt und die Bilddaten zurückgibt. Hier werden die Bilddaten in eine dataURL konvertiert und die Daten zurückgegeben. Die dataURL repräsentiert die Bilddaten als URL.

from flask import Flask,render_template,jsonify,request

import matplotlib
matplotlib.use('agg')
from matplotlib import pyplot as plt
from matplotlib.backends.backend_agg import FigureCanvasAgg
import io,base64

app = Flask(__name__)

@app.route('/')
def main():
    return render_template('index.html')

@app.route('/image',methods=['POST'])
def image():
    data = request.json
    x = data['x']
    y = data['y']

 #Erstellen Sie ein Diagramm
    plt.figure(figsize=(3,3),dpi=100)
    plt.plot(x,y,'k*-',markersize=10)

 # Ändern Sie die Zahl in dataURL
    canvas = FigureCanvasAgg(plt.gcf())
    png_output = io.BytesIO()
    canvas.print_png(png_output)
    img_data = base64.b64encode(png_output.getvalue()).decode('utf-8')
    dataurl = 'data:image/png;base64,'+img_data

    return jsonify({'img_data':dataurl})

if __name__ == "__main__":
    app.run()
import matplotlib
matplotlib.use('agg')
<html>
<body>

<button onclick="image();">img</button>
<div id='img'></div>

<script>

function image(){
  fetch('/image', {
    method: "POST",
    headers: { "Content-Type": "application/json"},
    body: JSON.stringify({"x":[0,1,2,3,4,5], "y":[5,2,4,0,3,8]})
  }).then(
    response => response.json()
  ).then(
    json => { document.getElementById('img').innerHTML = `<img src="${json['img_data']}">`; }
  ).catch(
    e => console.error(e)
  );
}

</script>

</body>
</html>

--Klicken Sie auf die Schaltfläche img, um die Daten "x = [0,1,2,3,4,5]", "y = [5,2,4,0,3,8]" an den Server zu senden. --Wenn die Antwort zurückgegeben wird, geben Sie die dataURL in den src des img-Tags ein und das Bild wird angezeigt.

Cross Origin Request (COR): Zugriff von einer anderen Domain

Standardmäßig ist der Zugriff von einer anderen Domäne eingeschränkt. Verwenden Sie dazu das flask-cors-Paket.

pip install flask-cors
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/')
def root():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

Benutzerauthentifizierung (Digest-Authentifizierung)

Verwenden Sie zur Authentifizierung das Paket flask-httpauth.

pip install flask-httpauth
from flask import Flask
from flask_httpauth import HTTPDigestAuth

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret key here'
auth = HTTPDigestAuth()

users = {
    'Michael': 'pw_m',
    'Smith': 'pw_s'
}

@auth.get_password
def get_pw(username):
    if username in users:
        return users.get(username)
    return None

@app.route('/')
@auth.login_required
def root():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

--Erstellen Sie eine Funktion (get_pw), die das Kennwort des Benutzers zurückgibt, wenn der Benutzer vorhanden ist, oder None, wenn der Benutzer nicht vorhanden ist, unter Angabe des Benutzernamens und dann @auth Mit .get_password dekorieren.

Recommended Posts

Bequeme Nutzungsübersicht von Flask
Zusammenfassung der Verwendung von pyenv
Zusammenfassung der grundlegenden Verwendung von Pandas
Zusammenfassung der Verwendung von pytest
Installation von Python 3 und Flask [Zusammenfassung der Umgebungskonstruktion]
Bequeme Verwendung von Ipython
Tensorflow / Keras-Zusammenfassung
Grundlegende Verwendung von Jinja2
Verwendung von Python-Einheimischen ()
Grundlegende Verwendung von SQL Alchemy
Zusammenfassung der Zeichenfolgenoperationen
Kolbenartikel-Zusammenfassungsseite
Zusammenfassung der Python-Argumente
Zusammenfassung der Testmethode
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
Zusammenfassung der Dinge, die bei der Verwendung von Pandas praktisch waren
pandas Matplotlib Zusammenfassung nach Verwendung
Super grundlegende Verwendung von Pytest
Zusammenfassung der Python-Dateivorgänge
Zusammenfassung der Python3-Listenoperationen
2017.3.6 ~ 3.12 Zusammenfassung unserer Aktivitäten
Tensorflows praktische Bibliothek TF-Slim
Bequeme Hinweise zur Verwendung von Diff-Befehlen
Zusammenfassung der Linux-Verteilungstypen
Pipenv Nutzungszusammenfassung (für mich)
(Minimale) Verwendung von Django Logger
Beispiel für die Verwendung von Python Pickle
Grundlegende Verwendung von Python-F-String
Eine kurze Zusammenfassung von Linux
[Python] Richtige Verwendung von Join
Index der Verwendung bestimmter Pandas
Zusammenfassung der Proxy-Verbindungseinstellungen
Zusammenfassung der Verwendung von pandas.DataFrame.loc
Zusammenfassung der Grundkenntnisse von PyPy Teil 1
Zusammenfassung der grundlegenden Implementierung von PyTorch
Zusammenfassung der Kratzbeziehung (Selen, Pyautogui)
Eine kurze Zusammenfassung der Python-Sammlung
H29.2.27 ~ 3.5 Zusammenfassung meiner Arbeit
Zusammenfassung der Stack Overflow Developer Survey 2020
Benutzerfreundliche Hinweise für Anaconda (conda)
Maschinelles Lernen ③ Zusammenfassung des Entscheidungsbaums
Zusammenfassung verschiedener Operationen in Tensorflow
Eine grobe Zusammenfassung der Geschichte des Betriebssystems
Ich habe die Quantenbits (Anfänger) kurz zusammengefasst.
Zusammenfassung des Konvertierungsverhaltens von go json
[Python] Richtige Verwendung der if-Anweisung
[Anaconda3] Zusammenfassung häufig verwendeter Befehle
Zusammenfassung der Verwendung von csvkit
[Für Wettkampfprofis] Zusammenfassung der Verdoppelung
Zusammenfassung der Python-Indizes und -Slices
Zusammenfassung der Mehrprozessverarbeitung der Skriptsprache
[OpenCV; Python] Zusammenfassung der Funktion findcontours