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.
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.
Im Backend haben wir die folgenden 5 Funktionen implementiert!
Ich war für drei von ihnen verantwortlich, also werde ich über diesen Teil schreiben!
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.
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.
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.
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.