Drf apiView 视图实现

2019-04-25  本文已影响0人  爱修仙的道友

一、apiView -- Serializer

# app/serializers.py
from rest_framework import serializers
from . import models

class GoodsSerializer(serializers.Serializer):
    name = serializers.CharField(required=True,max_length=30)
    goods_sn = serializers.CharField()
    sold_num = serializers.IntegerField()
    market_price = serializers.BooleanField()

    def create(self, validated_data):
        """
        Create and return a new `Snippet` instance, given the validated data.
        """
        return models.Goods.objects.create(**validated_data)

    def update(self, instance, validated_data):
        """
        Update and return an existing `Snippet` instance, given the validated data.
        """
        instance.name = validated_data.get('name', instance.name)
        instance.goods_sn = validated_data.get('goods_sn', instance.goods_sn)
        instance.sold_num = validated_data.get('sold_num', instance.sold_num)
        instance.market_price = validated_data.get('market_price', instance.market_price)
        instance.save()
        return instance
# app/views.py
from django.http import Http404
from rest_framework import status
from rest_framework.views import APIView
from .serializers import GoodsSerializer
from rest_framework.response import Response

from . import models


class GoodsList(APIView):
    """
    List all snippets, or create a new good.
    """
    def get(self, request, format=None):
        goods = models.Goods.objects.all()
        serializer = GoodsSerializer(goods, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = GoodsSerializer(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)


class GoodsDetail(APIView):
    """
    Retrieve, update or delete a Good instance.
    """
    def get_object(self, pk):
        try:
            return models.Goods.objects.get(pk=pk)
        except models.Goods.DoesNotExist:
            raise Http404

    def get(self, request, pk, format=None):
        snippet = self.get_object(pk)
        serializer = GoodsSerializer(snippet)
        return Response(serializer.data)

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

    def delete(self, request, pk, format=None):
        good = self.get_object(pk)
        good.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

from . import views
from django.urls import path
from rest_framework.urlpatterns import format_suffix_patterns

urlpatterns = [
    path('goods/',views.GoodsList.as_view(),name='goods_list'),
    path('goods/<int:pk>/', views.GoodsDetail.as_view()),
]

urlpatterns = format_suffix_patterns(urlpatterns)

二、apiView -- ModelSerializer

from rest_framework import serializers
from . import models

class GoodsSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Goods
        fields = "__all__"
image.png
上一篇下一篇

猜你喜欢

热点阅读