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())
]