Django19:DRF_APIView使用详解

from .serializers import MerchantSerializer,GoodsCategorySerializer
from django.http import JsonResponse
from django.views.decorators.http import require_http_methods
from app.models import Merchant,GoodCategory,Goods
from rest_framework.response import Response
from rest_framework.decorators import api_view
from rest_framework import status
from rest_framework.views import APIView


class MerchantView(APIView):
    # 检索 更新和删除一个merchant实例对象
    def get_object(self,pk):
        try:
            return Merchant.objects.get(pk=pk)
        except Merchant.DoesNotExist:
            raise status.HTTP_404_NOT_FOUND

    def get(self,request,pk=None):
        if pk:
            merchant = self.get_object(pk)
            serializer = MerchantSerializer(merchant)
            return Response(serializer.data)
        else:
            queryset = Merchant.objects.all()
            serializer = MerchantSerializer(instance=queryset,many=True)
            return Response(serializer.data)

    def put(self,request,pk):
        merchant = self.get_object(pk)
        serializer = MerchantSerializer(merchant,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):
        merchant = self.get_object(pk)
        merchant.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

serializer.py

from rest_framework import serializers
from app.models import Merchant, GoodCategory, Goods

class MerchantSerializer(serializers.ModelSerializer):
    class Meta:
        model = Merchant
        fields = "__all__"


class GoodsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Goods
        fields = "__all__"


class GoodsCategorySerializer(serializers.ModelSerializer):
    # 嵌套
    merchant = MerchantSerializer(read_only=True)
    good_list = GoodsSerializer(many=True,read_only=True)
    merchant_id = serializers.IntegerField(write_only=True)

    class Meta:
        model = GoodCategory
        fields = "__all__"

    # 验证merchant_id
    def validate_merchant_id(self,value):
        if not Merchant.objects.filter(pk=value).exists():
            raise serializers.ValidationError('商家不存在!')
        return value

    def create(self, validated_data):
        merchant_id = validated_data.get('merchant_id')
        merchant = Merchant.objects.get(pk=merchant_id)
        category = GoodCategory.objects.create(**validated_data, merchant=merchant)
        return category


urls.py

from django.urls import path
from .views import MerchantView
app_name = 'classview'
urlpatterns = [
    # 列表 /merchant/ get
    # 新增 /merchant/ post
    # 详情 /merchant/pk/ get
    # 修改 /merchant/pk/ put
    # 删除 /merchant/pk/ delete

    path('merchant/',MerchantView.as_view()),
    path('merchant/<int:pk>', MerchantView.as_view())

]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值