Как указать структуру полезной нагрузки и указать заголовки в каждом запросе Django URLS - PullRequest
0 голосов
/ 12 ноября 2018

Ниже приведены мои urls.py Мне нужно указать структуру полезной нагрузки и указать заголовки в каждом запросе

    from django.conf.urls import url, include
    from rest_framework.routers import DefaultRouter
    from . import views

    router = DefaultRouter()

    router.register("patient", views.PatientsApiView)

    urlpatterns = [
        url(r'', include(router.urls))

     ]

Ниже приведены мои views.py Я сделал 1 представление с использованием модели Viewset, а другое - с использованием общего представления API

class PatientsApiView(viewsets.ModelViewSet):
    model = Patient
    fields = ("id",  "first_name", "last_name", "phone", "email", "created_at")

"""
Create a serializer in serializer.py

class EmbryoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Embryo
        fields = ("id", "name", "analysis_result", "created_at", "patient")

"""

class EmbryoApiView(APIView):
    def get(self, request, format=None):
        embryo = Embryo.objects.all()
        serializer = EmbryoSerializer(embryo, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = EmbryoSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def put(self, request, pk, format=None):
        embryo = self.get_object(pk)
        serializer = EmbryoSerializer(embryo, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def patch(self, request, user_id):
        user = User.objects.get(id=user_id)
        serializer = EmbryoSerializer(embryo, data=request.data, partial=True)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
router.register("embryo", views.EmbroApiView)

Как вы думаете, я могу достичь этого в моих views.py

1 Ответ

0 голосов
/ 12 ноября 2018

Указание структуры полезной нагрузки и заголовков для каждого запроса лучше всего делать в views.py и serializers.py

Полезная нагрузка будет проверена в сериализаторах. Заголовки вы можете просто передать в Response (). Например return Response( … , headers={'My-Header': 'hello'}) добавит заголовок.

пример:

class EmbryoApiView(APIView):
    def get(self, request, format=None):
        embryo = Embryo.objects.all()
        serializer = EmbryoSerializer(embryo, many=True)
        return Response(serializer.data, headers={'My-Header': 'Below are all the embroys for this patient'})
...