标签:href turn rgs rest 详细 meta art 扩展 port
该篇博客主要介绍restframework内置的Request类,它扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等。
如: 在APIView中封装的request,就实现了请求数据的解析:对于GET请求的参数我们通过request.query_params来获取。对于POST请求、PUT请求的数据我们通过request.data来获取。
在上一篇中,我们获取请求的方式:
urls.py
url(r‘comment/‘,views.CommentView.as_view()), url(r‘comment/(?P<pk>\d+)/$‘,views.CommentDetail.as_view()),
views.py
from app01 import models from app01 import app01_serializers # 导入验证表 from rest_framework.views import APIView # 你打开源码,在rest_framework文件夹下还有一个一个views文件,里面有APIView类,它继承了view from rest_framework.response import Response class Comment(APIView): def get(self, request, *args, **kwargs): query_set = models.School.objects.all() ser_obj = app01_serializers.CommentSerializer(query_set, many=True) return Response(ser_obj.data) class CommentDetail(APIView): def get(self, request, pk, *args, **kwargs): obj = models.School.objects.filter(pk=pk).first() ser_obj = app01_serializers.CommentSerializer(obj) return Response(ser_obj.data)
app01_serializers.py(在我们应用下创建的文件)
from app01.models import Comment from rest_framework import serializers class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = "__all__" depth = 1
GenericAPIView对APIView再次封装,实现了强大功能。通常使用时,可搭配一个或多个Mixin扩展类:
1.ListModelMixin # 提供list方法快速实现列表视图(多条数据) 2.CreateModelMixin # 提供create方法快速实现创建资源的视图 3.RetrieveModelMixin # 提供retrieve方法,可以快速实现返回一个存在的数据对象(需要传入pk) 4.UpdateModelMixin # 提供update方法,可以快速实现更新一个存在的数据对象。 提供partial_update方法,可以实现局部更新 5.DestroyModelMixin # 提供destroy方法,可以快速实现删除一个存在的数据对象
这五个类分别实现了增删改查的功能,其中ListModelMixin实现的request方法无需传入id值,就可以查找全部数据,而RetrieveModelMixin需要传入id才能实现查找,而且是针对性的
GenericAPIView属性:
支持定义的属性: 列表视图与详情视图通用: queryset # 列表视图的查询集 serializer_class # 视图使用的序列化器 列表视图使用: pagination_class # 分页控制类 filter_backends # 过滤控制后端 详情页视图使用: lookup_field # 查询单一数据库对象时使用的条件字段,默认为‘pk‘ lookup_url_kwarg # 查询单一数据时URL中的参数关键字名称,默认与look_field相同
详细介绍猛戳这里
urls.py
url(r‘comment/(?P<pk>\d+)/$‘,views.CommentDetail.as_view()), url(r‘comment/‘,views.CommentView.as_view()),
app01_serializers.py(在我们应用下创建的文件)
from app01.models import Comment from rest_framework import serializers class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment fields = "__all__" depth = 1
views.py(这是针对get请求操作)
from rest_framework.mixins import ListModelMixin,RetrieveModelMixin from rest_framework.generics import GenericAPIView class CommentView(GenericAPIView,ListModelMixin): queryset = models.Comment.objects.all() # 必须叫这个名字 serializer_class = app01_serializers.CommentSerializer def get(self,request,*args,**kwargs): return self.list(request,*args,**kwargs) class CommentDetail(GenericAPIView,RetrieveModelMixin): queryset = models.Comment.objects.all() serializer_class = app01_serializers.CommentSerializer def get(self,request, pk,*args,**kwargs): return self.retrieve(request, pk, *args, **kwargs)
标签:href turn rgs rest 详细 meta art 扩展 port
原文地址:https://www.cnblogs.com/LearningOnline/p/9410677.html