Day14视图以及路由

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概念

*继承:ListModelMixinRetrieveModelMixinCreateModelMixinUpdateModelMixinDestroyModelMixin

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值