14.1ViewSet
14.1.1 概念
概念:许多视图集是逻辑操作的功能合集,可以采用路由映射的方式进行选择,并且使用功能来命名
14.1.2action是什么
from django.shortcuts import render
from rest_framework.response import Response
from myapp.models import Kind,Goods
from myapp.serializers import KindSerialisers,GoodsSerializers,GoodsSerializers2
from rest_framework.generics import ListAPIView,ListCreateAPIView,RetrieveUpdateDestroyAPIView
from rest_framework.views import APIView
# Create your views here.
采用拓展类对数据进行转化 ListCreateAPIView 实现查询数据的全部和添加数据的全部
class KindsView(ListCreateAPIView):
queryset = Kind.objects.all() # 指定查询结果集
serializer_class = KindSerialisers # 指定序列化器
# RetrieveUpdateDestroyAPIView帮助我们查询单个数据 修改一个数据 删除一个数据
class KindView(RetrieveUpdateDestroyAPIView):
queryset = Kind.objects.all() # 指定查询结果集
serializer_class = KindSerialisers # 指定序列化器
lookup_url_kwarg = 'id' # 指定动态参数的名
lookup_field = 'id' #指定过滤的ORM字段
视图集的实现路由映射
path('userlist/', UserViewSet.as_view({'get': 'list'})),
path('userdetail/', UserViewSet.as_view({'get': 'retrieve'})
14.2ModelViewSet
14.2.1概念
*继承:ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestroyModelMixin
14.3DRF路由的映射
例题示范:
在子应用下的urls.py文件下
from django.urls import path
from myapp import views
from rest_framework import routers
urlpatterns = [
path('student2/<int:id>/',views.StudentView2.as_view()),
]
# 生成路由对象
router=routers.DefaultRouter()
# 使用路由对象生成路由的信息
router.register('province',views.ProvinceView,'pro')
router.register('student',views.StudentView,'stu')
# 路由追加
urlpatterns+=router.urls
在子应用下的serialisers.py文件下
# 导包
from rest_framework import serializers # 导入序列化
from myapp.models import Province,Student # 导入两表的模型类
class ProvinceSerializers(serializers.ModelSerializer):
class Meta:
model=Province
fields='__all__'
class StudentSerializers(serializers.ModelSerializer):
class Meta:
model=Student
fields='__all__'
class StudentSerializers2(serializers.ModelSerializer):
pro_name=serializers.SerializerMethodField(read_only=True)
def get_pro_name(self,obj):
return obj.province.pro_name
class Meta:
model=Student
fields="__all__"
在子应用下的views.py文件下
# 导包
from django.shortcuts import render
from rest_framework.response import Response
from myapp.models import Student,Province
from myapp.serialisers import ProvinceSerializers,StudentSerializers2,StudentSerializers
from rest_framework.viewsets import ModelViewSet
from rest_framework.views import APIView
from rest_framework.pagination import PageNumberPagination
# Create your views here.
class ProvinceView(ModelViewSet):
queryset = Province.objects.all()
serializer_class = ProvinceSerializers
class StudentView(ModelViewSet):
queryset = Student.objects.all()
serializer_class = StudentSerializers
class StudentView2(APIView):
def get(self,request,id):
stu_data=Student.objects.filter(province_id=id)
ser=StudentSerializers2(instance=stu_data,many=True)
return Response(ser.data,status=200)