WebApi-Erstellung mit Python (CRUD-Erstellung) Für Anfänger

Zweck dieses Artikels

Erstellen Sie einen Webserver, der CRUD-Operationen für die Datenbank ausführen kann. Ich habe es sorgfältig erklärt. Wir heissen dich willkommen.

Einführung & Annahmen

○ Prämisse

Wort

-Flask: Ein Webanwendungsframework, das auf Python ausgeführt wird. Ich konnte problemlos eine Webanwendung erstellen. -WebApi: In diesem Artikel wird auf einen Webserver verwiesen, der auf der Datenbank ausgeführt wird, wenn Sie den URI drücken.

Überblick

  1. Installieren Sie den Kolben
  2. Erstellen Sie eine API-Datei

1. Installieren Sie den Kolben

Geben Sie in der Befehlszeile den folgenden Befehl ein.

pip install Flask

2. Erstellen Sie eine API-Datei

Als Erklärungsfluss zeigen wir zuerst den gesamten Code und erklären dann kurz jeden Code.

Das gesamte Bild der Web-API-Datei

Der Server erstellt zunächst die folgende Datei und führt sie aus. Sie können die Datenbank betreiben, indem Sie beim Starten des Servers auf den in der CRUD-Methode festgelegten URI klicken.

sampleapp.py


from flask import Flask, jsonify, request, render_template

app = Flask(__name__)

# DB
stores = [
    {
        'name': 'my_store',
        'items': [
            {
            'name': 'chocolate',
            'price': 120
            }
        ]
    }
]

#CRUD für den Laden--------------
# GET /store/<string:name>
@app.route('/stores/<string:name>') # 'http://127.0.0.1:5000/store/some_name'
def get_store(name):
    for store in stores:
        if store["name"] == name:
            return jsonify(store)
    return jsonify({"message": "no store named {} found.".format(name)})

# POST /store data: {name:}
@app.route('/stores', methods=['POST'])
def create_store():
    request_data = request.get_json()
    store = next(filter(lambda x: x["name"]==request_data["name"], stores), None)
    if store != None:
        return jsonify({"message": "store named {} already exist.".format(request_data["name"])})
    else:
        new_store = {
            "name": request_data["name"],
            "items": request_data["items"]
        }
        stores.append(new_store)
        return jsonify({"message": "{} store is added.".format(request_data["name"])})

# PUT /store data: {name:}
@app.route('/stores/<string:name>', methods=['PUT'])
def update_store(name):
    request_data = request.get_json()
    store = next(filter(lambda x: x["name"] == name, stores), None)
    if store == None:
        return jsonify({"message": "no store named {} found.".format(name)})
    else:
        store["items"] = request_data["items"]
        return jsonify({"message": "{} is updated.".format(name)})

# DELETE /stores/<string:name>
@app.route('/stores/<string:name>', methods=['DELETE'])
def delete_store(name):
    global stores
    stores = list(filter(lambda x: x["name"] != name, stores))
    return jsonify({"message": "Delete store named {}".format(name)})

# --------------------CRUD für den Laden

# GET /stores
@app.route('/stores')
def get_stores():
    return jsonify({'stores': stores})

#Versuchen Sie, HTML auf dem Startbildschirm zu laden.
# GET /
@app.route('/')
def home():
    return render_template("index.html")

app.run(port=5000)

Kommentar

sampleapp.py


from flask import Flask, jsonify, request, render_template

Ich importiere die erforderlichen Module aus der Flask-Bibliothek.

sampleapp.py


app = Flask(__name__)

Erstellen Sie den Anwendungskörper. In Python gibt es eine spezielle Standardvariable, die von einem Unterstrich umgeben ist, und der Name entspricht dem Dateinamen. In diesem Fall entspricht er also sampleapp. Der Name der ausführbaren Datei (die von Python ~ vom Terminal ausgeführte Datei) gibt jedoch main zurück. Flask kann nur mit ausführbaren Dateien ordnungsgemäß funktionieren, daher stellen wir sicher, dass name = main für die aufgerufene Datei gilt.

sampleapp.py


# DB
stores = [
    {
        'name': 'my_store',
        'items': [
            {
            'name': 'chocolate',
            'price': 120
            }
        ]
    }
]

Es ist eine temporäre Datenbank. Es wird davon ausgegangen, dass mehrere Geschäfte gespeichert sind und jedes Geschäft einen Geschäftsnamen und mehrere Produktdaten enthält.

sampleapp.py


# GET /store/<string:name>
@app.route('/stores/<string:name>') # 'http://127.0.0.1:5000/store/some_name'
def get_store(name):
    for store in stores:
        if store["name"] == name:
            return jsonify({"stores": store})
    return jsonify({"message": "no store named {} found.".format(name)})

GET-Methode. Der Geschäftsname wird angegeben, und wenn er vorhanden ist, wird er als Antwort vom Typ json zurückgegeben. Selbst wenn der Speicher nicht vorhanden ist, wird die Nachricht mit einer Antwort vom Typ JSON zurückgegeben.

Der URI ist in der App mit @ app.route ('/ store / << string: name >>') registriert. (Die Standard-IP wird automatisch als "http: //127.0.0.1: 5000" angegeben.) Wenn dieser URI getroffen wird, wird die folgende Methode aufgerufen. Der << string: name >> im URI wird dem Argument zugewiesen. jsonify () ist eine Methode zum Erstellen eines json-Typs aus einem Wörterbuchtyp.

sampleapp.py


# POST /store data: {name:}
def create_store():
    request_data = request.get_json()
    store = next(filter(lambda x: x["name"]==request_data["name"], stores), None)
    if store != None:
        return jsonify({"message": "store named {} already exist.".format(request_data["name"])})
    else:
        new_store = {
            "name": request_data["name"],
            "items": request_data["items"]
        }
        stores.append(new_store)
        return jsonify({"message": "{} store is added.".format(request_data["name"])})

POST-Methode. POST wird bei der Angabe des URI angegeben. (GET ist standardmäßig angegeben.) Sie können den Anfragetext mit request.get_json () abrufen. Wenn es kein Geschäft mit demselben Namen gibt, fügen Sie das Geschäft mit den Daten des Anforderungshauptteils zur Datenbank hinzu.

Die PUT-Methode und die DELETE-Methode werden weggelassen, da keine zusätzlichen Informationen vorhanden sind.

sampleapp.py


# GET /stores
@app.route('/stores')
def get_stores():
    return jsonify({'stores': stores})

Ich habe eine API erstellt, um die gesamte Datenbank zum Überprüfen von CRUD-Operationen abzurufen.

sampleapp.py


#Versuchen Sie, HTML auf dem Startbildschirm zu laden.
# GET /
@app.route('/')
def home():
    return render_template("index.html")

Sie können eine HTML-Datei aufrufen. Der Angerufene ist so eingestellt, dass er die GET-Methode für die gesamte Datenbank aufruft. スクリーンショット 2020-10-06 1.45.12.png

sampleapp.py


app.run(port=5000)

Schreiben Sie abschließend die Beschreibung, um die Anwendung zu starten. Der Standardwert 5000 ist der Standardwert, auch wenn Sie die Portnummer nicht angeben, aber ich wage es aus Gründen der Übersichtlichkeit, sie zu schreiben. Natürlich können Sie auch andere Portnummern angeben.

Funktionsprüfung

Lauf

$ python sampleapp.py
 * Serving Flask app "sampleapp" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Bestätigung

Ich habe mit Postman (einem Tool, das HTTP-Anfragen einfach macht) überprüft. Ich konnte den Betrieb von CRUDapi bestätigen.

GET (stores) Holen Sie sich Daten für die gesamten Geschäfte スクリーンショット 2020-10-05 23.49.29.png

POST Registrieren Sie den neuen Shop, indem Sie ihn in den Questkörper einfügen. スクリーンショット 2020-10-06 0.15.22.png Bestätigung (GET (speichert)) スクリーンショット 2020-10-06 0.15.41.png

Startbildschirm

スクリーンショット 2020-10-06 0.25.41.png

Andere CRUDs funktionieren genauso.

Impressionen

Wenn Sie Python / Flask verwenden Es scheint, dass Sie in kurzer Zeit eine Web-API mit einfachem Code erstellen können.

Ich werde es nicht für den ursprünglichen Zweck verwenden, daher möchte ich es als Bot WebApi betrauern.

Recommended Posts

WebApi-Erstellung mit Python (CRUD-Erstellung) Für Anfänger
INSERT in MySQL mit Python [Für Anfänger]
[Python] Bilder mit OpenCV lesen (für Anfänger)
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Python Lehrbuch für Anfänger
OpenCV für Python-Anfänger
Kausales Denken und kausale Suche von Python (für Anfänger)
~ Tipps für Python-Anfänger mit Liebe von Pythonista ① ~
~ Tipps für Python-Anfänger mit Liebe von Pythonista ② ~
[Einführung für Anfänger] Umgang mit MySQL mit Python
Python3-Umgebungskonstruktion (für Anfänger)
Grundlegende Python-Grammatik für Anfänger
100 Pandas klopfen für Python-Anfänger
Python #Funktion 1 für Super-Anfänger
Python #Liste für Super-Anfänger
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
[Python] Einführung in die Diagrammerstellung mit Corona-Virendaten [Für Anfänger]
Lösen Sie AtCoder-Probleme Bootcamp für Anfänger (Medium 100) mit Python
Python-Übungen für Anfänger # 2 [für Anweisung / while-Anweisung]
Erste Schritte mit Python für PHPer-Klassen
Python #index für Super-Anfänger, Slices
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
AWS Layer Creation Script für Python
Python #len Funktion für Super-Anfänger
Web Scraping für Anfänger in Python (1)
Führen Sie unittest in Python aus (für Anfänger)
Web Scraping für Anfänger in Python (4) -1
Python #Hello World für Super-Anfänger
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 2
Erste Schritte mit Python für PHPer-Funktionen
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
Einfache Schlüsselwortextraktion mit TermExtract für Python
WEB-Scraping mit Python (für persönliche Notizen)
[Python] Protokoll des Studientreffens für Anfänger (7/15)
Manuelle SSH-Registrierung für Coreserver mit Python
Verwenden Sie DeepL mit Python (für die Artikelübersetzung)
Memo, um nach KPI mit Python zu fragen
Verstärken Sie Bilder für maschinelles Lernen mit Python
[Episode 2] Anfänger haben Numeron AI mit Python ausprobiert
[Episode 3] Anfänger haben Numeron AI mit Python ausprobiert
Tipps zum Umgang mit Binärdateien in Python
Lassen Sie uns Python für Super-Anfänger zusammenstellen
[Shakyo] Begegnung mit Python zum maschinellen Lernen
Verarbeiten Sie mehrere Listen mit for in Python
[Episode 0] Anfänger haben Numeron AI mit Python ausprobiert
Erste Schritte mit Python für PHPer-Super Basics
[Episode 1] Anfänger haben Numeron AI mit Python ausprobiert
Debuggen Sie die MySQL-Verbindung mit Python MySQL.connector
Excel-Tabellenerstellung mit Python [Fortschrittsverwaltungstabelle]
Wie Python-Anfänger mit Progete beginnen
Atcoder-Standardeingabesatz für Anfänger (Python)
Vorbereitung zum Schaben mit Python [Schokoladengeschmack]
Ein Lehrbuch für Anfänger von Python-Anfängern
Web-Scraping durch Anfänger mit Python (4) -3 GCE VM-Instanzerstellung und Scraping auf VM
Leicht verständliche Erklärung der Python-Webanwendung (Django) auch für Anfänger (2) [Projekterstellung]
Janken Poi mit Python Lassen Sie uns für Anfänger auf einem lokalen Windows-Server laufen
Fehler aufgrund von UnicodeDecodeError beim Lesen der CSV-Datei mit Python [Für Anfänger]
Hinweise für Python-Anfänger mit Erfahrung in anderen Sprachen 12 (+1) Elemente nach Funktion
2016-10-30 sonst für Python3> für: