[PYTHON] Ich habe eine Web-API erstellt

Einführung

Dieser Artikel ist für den 21. Tag von Volare Adventskalender 2019.

Diesmal habe ich zum ersten Mal die API der iOS-Anwendung erstellt. Zum Teil, weil ich studiere, habe ich versucht, eine API mit dem Django REST Framework zu erstellen, deshalb möchte ich darüber schreiben: entspannt: Der Artikel auf der iOS-Seite der erstellten Anwendung lautet hier.

Über die App

Das Hauptziel beim Erstellen von Apps sind Studenten, die wie wir alleine leben: dark_sunglasses: Für Details darüber, wie die App entschieden wurde, Es ist mühsam, beim Kochen über Menüs nachzudenken, aber vorhandene Apps suchen, indem sie sich ansehen, was sich im Kühlschrank befindet. → Das Ziel bestehender ist für Menschen mit Familien

Ich mag es. Ich fand es praktisch, eine App zu haben, die Menüs automatisch durch Eingabe von Abneigungen anzeigt! → Grundsätzlich mache ich nicht viel, ich möchte jederzeit machen, was ich mag (es gibt nicht viel Essen im Kühlschrank: Ghost :)

Ich habe beschlossen, es von einem solchen Punkt aus zu machen! (Wenn Sie nicht das gleiche Konzept haben, machen wir eines: entspannt :)

Ryu-chan, der das Team gemeinsam entwickelt, erklärt die App. Diesmal war ich für dieses Backend verantwortlich.

Was Sie implementiert haben

Im Backend haben wir die folgenden 5 Funktionen implementiert!

Ich war für drei von ihnen verantwortlich, also werde ich über diesen Teil schreiben!

Benutzerauthentifizierung

from main.models import User, FoodConfigParam
from main.serializers import AuthSerializer
from rest_framework.generics import GenericAPIView
from rest_framework.exceptions import AuthenticationFailed
from rest_framework.response import Response
import random

from rest_framework_jwt.settings import api_settings
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER

class RegisterAuthView(GenericAPIView):
    permission_classes = ()
    serializer_class = AuthSerializer
    def post(self, request):
        serializer = self.get_serializer(data=request.data)
        serializer.is_valid(raise_exception=True)

        #Gibt das Token zurück, wenn uuid registriert ist
        if User.objects.filter(uuid=serializer.data['uuid']):
            user = User.objects.get(uuid=serializer.data['uuid'])
            payload = jwt_payload_handler(user)
            return Response({
                'token': jwt_encode_handler(payload),
            })

        user = User.objects.create_user(uuid=serializer.data['uuid'])
        user.save()
        if not user:
            raise AuthenticationFailed()
        payload = jwt_payload_handler(user)
        #Fügen Sie bei der Registrierung als Benutzer Standardzutaten hinzu
        user = User.objects.filter(uuid=serializer.data['uuid']).last()
        food = FoodConfigParam()
        food.create_defaultfood(user=user)
        return Response({
            'token': jwt_encode_handler(payload),
        })

Wir prüfen, ob sich in der Datenbank ein Benutzer befindet, der mit der gesendeten UUID übereinstimmt, und wenn nicht, erstellen wir einen Benutzer.

Anzeige der Zutatenliste und Chargenänderung für jeden Benutzer

from main.models import FoodConfigParam
from main.serializers import FoodConfigParamSerializer
from rest_framework.generics import GenericAPIView
from rest_framework.views import APIView
from rest_framework.response import Response

class UserFoodConfig(GenericAPIView):
    queryset = FoodConfigParam.objects.all()
    serializer_class = FoodConfigParamSerializer

    def get(self, request):
        foodConfigParams = FoodConfigParam.objects.filter(user=request.user)
        serializer = FoodConfigParamSerializer(foodConfigParams, many=True)
        return Response({'data': serializer.data})

    def put(self, request):
        res = []
        for config in request.data['data']:
            name = config['name']
            rate = config['rate']
            #Extrahieren Sie diejenigen, die dem registrierten Benutzer und dem Namen der Zutat entsprechen
            foodConfigParam = FoodConfigParam.objects.get(user=request.user, name=name)
            #Wahrscheinlichkeit ändern
            serializer = FoodConfigParamSerializer(foodConfigParam, data={'rate': rate}, partial=True)
            serializer.is_valid(raise_exception=True)
            serializer.save()
            res.append(serializer.data)
        return Response({'data': res})

Diejenigen, die dem Benutzer und dem Namen der Zutat entsprechen, werden extrahiert und die Erscheinungsrate wird geändert.

Was war schwierig

Die von mir erstellte API funktionierte nicht gut oder funktionierte, aber bei Verbindung mit iOS unerwartet. Auf der iOS-Seite scheint es verschiedene Dinge zu geben, wie das Vermeiden von Schreiblogik so weit wie möglich und das Reduzieren der Anzahl von Kommunikationen. Ich hatte das Gefühl, wenn ich nicht mehr Wissen auf der Vorderseite hätte, könnte ich nicht kommunizieren und es wäre schwierig ... Ich habe mich mit der iOS-Seite beraten und weiter darüber gesprochen, wie einfach dies sein würde, und ich habe gelernt.

abschließend

Dieses Mal habe ich etwas gemacht, das vorerst funktioniert, also verstehe ich RESTful immer noch nicht: cry: Also beschloss ich, die Güte des Django-Rest-Frameworks zu kennen und zu studieren, damit ich es optimal nutzen konnte. Vielen Dank für das Lesen bis zum Ende.

Recommended Posts

Ich habe eine Web-API erstellt
Ich habe ein ○ ✕ Spiel mit TensorFlow gemacht
Ich habe versucht, "Sakurai-san" LINE BOT mit API Gateway + Lambda zu erstellen
Ich habe versucht, einen "verdammt großen Literaturkonverter" zu machen.
Ich habe eine Burgsuch-API mit Elasticsearch + Sudachi + Go + Echo erstellt
Ich habe versucht, eine einfache Bilderkennungs-API mit Fast API und Tensorflow zu erstellen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe mit PyQt einen einfachen Texteditor erstellt
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, die COTOHA-API zu berühren
Ich habe versucht, das Webanwendungs-Framework zu vergleichen
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, ein System zu erstellen, das nur gelöschte Tweets abruft
Rubyist hat versucht, eine einfache API mit Python + Flasche + MySQL zu erstellen
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe versucht, Jojo mit LSTM ein seltsames Zitat zu machen
Ich habe versucht, mit Go einen exklusiven Kontrollmechanismus zu erstellen
Ich habe versucht zu debuggen.
Ich habe versucht, mit OpenCV eine Bewegungserkennungsüberwachungskamera mit einer WEB-Kamera mit Raspberry Pi herzustellen
Ich möchte Matplotlib zu einem dunklen Thema machen
Ich habe Web Scraping versucht, um die Texte zu analysieren.
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich möchte ein Spiel mit Python machen
Ich habe versucht, KI für Smash Bra zu machen
Ich las "Wie man ein Hacking Lab macht"
Ich habe versucht, eine zufällige Zeichenfolge zu generieren
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Super-Resolution-Methode / SRCNN build zu erstellen
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ①
Ich habe versucht, eine Gesichtsdiagnose-KI für professionelle Golferinnen zu erstellen ②
Ich habe versucht, einen URL-Verkürzungsdienst mit AWS CDK serverlos zu machen
Ich möchte eine Webanwendung mit React und Python Flask erstellen
Ich habe versucht, einen periodischen Prozess mit CentOS7, Selenium, Python und Chrome durchzuführen
Ich habe versucht, PredNet zu lernen
Ich habe eine einfache Mail-Sendeanwendung mit tkinter von Python erstellt
Ich habe versucht, SVM zu organisieren.
[Patentanalyse] Ich habe versucht, mit Python eine Patentkarte zu erstellen, ohne Geld auszugeben
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
Ich habe versucht, unsere Dunkelheit mit der Chatwork-API aufzudecken