Diese Übung ist für Sie vorgesehen, um sich mit grundlegender Backend-/Server -Seite auf interaktive Weise vertraut zu machen, sowie Sie, um sich in einer modernen Python-/Flask -Umgebung wohl zu entwickeln.
Wenn Sie Folgendes lesen, können Sie ein Gefühl für das Gesamtbild erhalten, wenn es um die Entwicklung von APIs/Schreib -Server -Nebencode geht und wie es in den Kontext einer größeren Webanwendung passt:
Dieses Projekt wird in mehrere Teile unterteilt. Nachdem Sie dieses Projekt abgeschlossen haben, müssen Sie es einreichen, indem Sie den folgenden Anweisungen folgen.
Diese Übung ist vor diesem Montag, dem 17. September, um 23:59 Uhr fällig. Wenn Sie insgesamt über 10 Stunden in die Arbeit mit React-Training verbracht haben, senden Sie ein, was Sie haben!
Für Fragen senden Sie eine E -Mail an [email protected].
Installationsanweisungen für Mac und Windows.
Eine weitere großartige Ressource für alles auf Python, einschließlich der Installation, ist der Anhänger -Leitfaden für Python.
Überprüfen Sie, ob Sie die richtigen Versionen haben, indem Sie die folgenden Befehle in Ihrem Terminal ausführen:
python3 -V
pip3 -V
pipenv --version
Geben Sie zuerst dieses Repository. Die Gabeltaste oben rechts. Dies kopiert dieses Repository auf Ihr Konto. Jetzt sollten Sie ein Repository mit dem Namen <yourusername>/flask-exercise haben.
Es sollte so aussehen (mein Benutzername ist TKO22): 
Klonen Sie dann dieses Repository (klicken Sie auf die grüne Schaltfläche "Klonen oder Download", wählen Sie HTTP und kopieren Sie es und fügen Sie sie den Speicherort <url> ein) und gehen Sie darauf ein:
$ git clone <url>
$ cd flask-exercise
Richten Sie dann Ihre virtuelle Umgebung ein und installieren Sie die für die Ausführung dieser App erforderlichen Python -Abhängigkeiten. Wir verwenden PipeNV, das automatisch alles einsetzt, wenn ein PipFile und PipFile.lock. PipFile verwendet Virtualenv, eine virtuelle Python -Umgebung, die aus anderen Python -Projekten isoliert ist und nicht in der Lage ist, andere Python -Programme auf derselben Maschine zu stören oder von ihnen betroffen zu sein. Sie können daher verschiedene Versionen desselben Pakets oder sogar unterschiedliche Python -Versionen ausführen.
pipenv install --skip-lock
Sie müssen in dieser virtuellen Umgebung sein, um diesen Server zu starten. Um das zu tun:
pipenv shell
Dann starten Sie den Serverauslauf:
(backend-exercise-o4dc6oDL)$ python app.py
Hinweis: Dies bleibt ein laufender Vorgang in Ihrem Terminal, sodass Sie eine neue Registerkarte oder ein neues Fenster öffnen müssen, um andere Befehle auszuführen.
Um den Server zu stoppen, drücken Sie Control-C .
Um Ihre virtuelle Umgebung zu verlassen, die als backend-exercise-[something here] , rennen Sie:
(backend-exercise-o4dc6oDL)$ deactivate
Sie können auch pipenv run vor einem Befehl hinzufügen, anstatt pipenv shell auszuführen. z. B. pipenv run python app.py
Bevor Sie Änderungen am Code vornehmen, stellen Sie sicher, dass Sie eine neue Filiale erstellen. Normalerweise werden Filialen basierend auf der angesprochenen Funktion oder Bugfix bezeichnet. Nennen Sie jedoch für dieses Projekt Ihre Filiale mit Ihrem eigenen Namen, damit Ihr Rezensent leicht folgen kann:
git checkout -b <YOUR_NAME>
Zweignamen sollten alle in Kleinbuchstaben sein und keine Räume enthalten. Verwenden Sie anstelle von Leerzeichen Bindestrichen. Zum Beispiel:
git checkout -b varun-munjeti
Wenn Sie den Server starten, wird es zu einem kontinuierlichen Auslaufprozess auf localhost:5000 . Verwenden Sie den Postboten, um Anfragen an Ihren Server zu stellen.
Machen Sie zunächst eine GET -Anfrage zum / Endpunkt. Da der Server auf localhost:5000 ausgeführt wird, ist die vollständige Endpunkt -URL localhost:5000/ .

Versuchen Sie, den Endpunkt /mirror -Endpunkt anzurufen. Sehen Sie sich zunächst den Code für den Endpunkt an, um zu sehen, wie Sie URL -Parameter angeben können. Stellen Sie dann eine Anfrage am Postman an localhost:5000/mirror/<name> :

Diese Übungen werden Sie durch das Erstellen einer erholsamen API mit Fläschchen führen! Wir möchten nicht, dass Sie den ganzen Aufschluss über die Einrichtung einer Datenbankinstanz durchlaufen. Daher haben wir Dummy -Daten und eine Scheindatenbankschnittstelle erstellt, um mit ihnen zu interagieren. Aus einfacher Bedeutung wird die gesamte App -Logik abzüglich der MockDB -Logik in app.py implementiert. Für größere Projekte werden die API -Endpunkte normalerweise in verschiedene Dateien unterteilt, die als views bezeichnet werden.
Schauen Sie sich vor dem Start die Funktion create_response und wie sie funktioniert. Stellen Sie sicher, dass Sie die Richtlinien für die Verwendung dieser Funktion befolgen, andernfalls folgt Ihre API nicht den richtigen Konventionen!
Schauen Sie sich auch die Scheindatenbank an. Die anfänglichen Dummy -Daten sind in mockdb/dummy_data.py definiert. Dies wird in der "Datenbank" "existieren", wenn Sie den Server starten.
Die in mockdb/mockdb_interface.py definierten Funktionen sind, wie Sie die MockDB abfragen können. In app.py , wo Sie Ihre API schreiben, wurde dies mit dem Namen db importiert. Wenn Sie den Code für Ihre Endpunkte schreiben, können Sie die DB -Schnittstellenfunktionen wie db.get('users') aufrufen.
Wenn Sie Ihren Code ändern, aktualisiert der Server automatisch, es sei denn, Ihr Code kompiliert nicht. In diesem Fall wird der Server nicht mehr ausgeführt und Sie müssen ihn nach dem Fixieren Ihres Codes manuell neu starten.
Definieren Sie den Endpunkt:
GET /users
Dies sollte eine ordnungsgemäß formatierte JSON -Antwort zurückgeben, die eine Liste aller user im MockDB enthält. Wenn Sie diesen Endpunkt sofort nach dem Start des Servers nennen, sollten Sie diese Antwort in Postman erhalten:
{
"code": 200,
"message": "",
"result": {
"users": [
{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
},
{
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
},
{
"age": 23,
"id": 3,
"name": "Varun",
"team": "NNB"
},
{
"age": 24,
"id": 4,
"name": "Alex",
"team": "C2TC"
}
]
},
"success": true
}
Definieren Sie den Endpunkt:
GET /users/<id>
Dies sollte einen einzelnen Benutzer abrufen, der die id aus der Anforderung zur Verfügung stellt.
Wenn es keinen Benutzer mit der bereitgestellten id gibt, geben Sie einen 404 mit einer beschreibenden message zurück.
Erweitern Sie die First /users -Entzug, indem Sie die Möglichkeit hinzufügen, die Benutzer anhand des Teams, in dem sie sich befinden, abfragen zu können. Sie sollten keinen URL -Parameter verwenden, wie Sie es in Teil 2 getan haben. Verwenden Sie stattdessen eine Abfragezeichenfolge.
Wenn team als Abfrage -String -Parameter bereitgestellt wird, geben Sie nur die Benutzer, die in diesem Team sind, zurück. Wenn das bereitgestellte team keine Benutzer enthalten, geben Sie eine leere Liste zurück.
Für diese Übung können Sie alle anderen Abfrage -String -Parameter als team ignorieren.
In Postman können Sie Abfragestöne -Parameter angeben, die die Abfragezeichenfolge in Ihre Anforderungs -URL schreiben oder auf die Schaltfläche Params neben dem Send klicken. Dies wird automatisch die Anforderungs -URL ausfüllen.
Das Folgende sollte passieren
GET /users?team=LWB
{
"code": 200,
"message": "",
"result": {
"users": [{
"age": 19,
"id": 1,
"name": "Aria",
"team": "LWB"
}, {
"age": 20,
"id": 2,
"name": "Tim",
"team": "LWB"
}]
},
"success": true
}

Definieren Sie den Endpunkt:
POST /users
Dieser Endpunkt sollte einen neuen Benutzer erstellen. Jede Anfrage sollte auch einen name , age und team in der body der Anfrage senden. Die id -Eigenschaft wird automatisch im MockDB erstellt.
Eine erfolgreiche Anfrage sollte einen Statuscode von 201 zurückgeben und den neu erstellten Benutzer zurückgeben.
Wenn einer der drei erforderlichen Parameter nicht bereitgestellt wird, erstellen Sie keinen neuen Benutzer in der DB und geben Sie einen 422 mit einer nützlichen message zurück. Im Allgemeinen sollten Ihre Nachrichten dem Benutzer/Entwickler ein nützliches Feedback darüber geben, was er falsch gemacht hat und wie er es beheben kann.
So können Sie body vom Postboten senden. Stellen Sie sicher, dass Sie dies nicht mit Abfrageparametern verwechseln! 
Definieren Sie den Endpunkt:
PUT /users/<id>
Hier müssen wir eine Benutzer id angeben, da wir angeben müssen, welcher Benutzer aktualisiert werden soll. Die body für diese Anfrage sollte dieselben Attribute wie die POST von Teil 4 enthalten.
Der Unterschied zu dieser PUT -Anforderung besteht jedoch darin, dass nur Werte mit den bereitgestellten Schlüssel ( name , age , team ) aktualisiert werden und die nicht bereitgestellten Parameter das entsprechende Attribut im aktualisierten Benutzer nicht ändern.
Sie müssen keine festgelegten body berücksichtigen, die nicht name , age oder team sind.
Wenn der Benutzer mit der bereitgestellten id nicht gefunden werden kann, geben Sie eine 404 und eine nützliche message zurück.
Definieren Sie den Endpunkt:
DELETE /users/<id>
Dadurch wird der Benutzer mit der zugehörigen id gelöscht. Geben Sie eine nützliche message zurück, obwohl im result der Antwort nichts angegeben werden muss.
Wenn der Benutzer mit der bereitgestellten id nicht gefunden werden kann, geben Sie eine 404 und eine nützliche message zurück.
Schreiben wir Unit -Tests! Unit -Tests sind für die Softwareentwicklung sehr wichtig. Es ermöglicht automatisch zu prüfen, ob unsere Funktionalität funktioniert oder nicht, da das manuelle Testen sehr langsam und fehleranfällig ist. Die testgetriebene Entwicklung ist ein Softwareentwicklungsprozess, bei dem wir eine Spezifikation definieren, Tests in diese Spezifikation schreiben, dann die Funktionalität implementieren und die Tests verwenden, um zu validieren, ob sie funktioniert. Wir haben ein bisschen davon für Sie gemacht, da die Tests für Teil 1-3 geschrieben sind. Um sie zu testen:
pipenv install --dev
pipenv run pytest
Wenn Ihre Änderungen funktionieren, sollten Sie eine grüne Linie sehen, in 5 passed . Wenn dies nicht der Fall ist, folgen Sie den Stapelspuren und beheben Sie Ihre Implementierung. Sobald sie arbeiten, schreiben wir Tests für die Teile 3-6 .
Wir verwenden PyTest, ein nützliches Python -Test -Framework, das automatisch Python -Methoden findet und ausführt, die mit test beginnen, wie z. B. test_get_index . In unserem Fall haben wir eine Testdatei mit dem Namen test_app.py , die alle Tests für Teile 1-3 enthält.
Jede Methode akzeptiert auch ein client -Objekt, das automatisch von PyTest injiziert wird. client ist eine Testanlage, die Sie möglicherweise in mehreren Tests verwenden, um eine feste Basis für Ihre Tests zu erhalten. Beim Initialisieren untersucht PyTest conftest.py und sammelt alle Vorrichtungen. In unserem Fall haben wir eine client -Leuchte, die einen Flask -Test -Client bietet, mit dem wir unsere API problemlos testen können. Schauen Sie sich an, wie Sie den Flask -Test -Client verwenden können, um andere Arten von Anfragen zu erstellen und wie Sie die Nutzlastanforderung verwenden können.
Wenn Sie mit all den Schritten fertig sind, drücken Sie Ihre Änderungen in Ihr Github -Repo!
Lassen Sie uns schwarz rennen, ein Python -Formatierer, bevor Sie sich einreichen. Dadurch werden alle Argumente darüber entfernt, wie wir Ihren Python -Code stylen möchten, und gibt den Rezensenten einen standardisierten Stil zum Überprüfen. Sie müssen es mit pipenv install --dev installieren lassen
pipenv run black .
Bevor Sie eine PR einreichen können, müssen Sie Ihre Filiale in eine abgelegene Filiale bringen (die auf Github und nicht lokal).
Überprüfen Sie, ob Sie in Ihrer Niederlassung sind:
git branch
Wenn Sie sicherstellen möchten, dass alle Ihre Commits in:
git log
Drücken Sie Q , um den git log zu beenden.
Schieben Sie Ihre Commits in Ihre Remote -Filiale:
git push
Wenn Sie dies zum ersten Mal tun, erhalten Sie möglicherweise einen Fehler, da Ihre Remotezweig noch nicht vorhanden ist. Normalerweise werden Sie den richtigen Befehl zur Verwendung angezeigt:
git push --set-upstream origin <YOUR_BRANCH_NAME>
HINWEIS: Dies muss nur erledigt werden, wenn Sie zum ersten Mal einen neuen Zweig schieben. Sie können danach nur git push verwenden.
Sobald dies erledigt ist, senden Sie bitte eine E -Mail an [email protected] mit dem Link zu Ihrem Forked Repository und Ihrem Filiallamen. Wir brauchen diese beiden Dinge, um Ihre Einreichung anzusehen.