from .models import Projects
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from rest_framework import status
from .serializers import ProjectsSerializer, Projects_ModelSerializer
from utils import pagination
# from utils import mixins
from rest_framework import generics
from rest_framework import filters, mixins
class ProjectDetailView(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
GenericAPIView):
queryset = Projects.objects.all()
serializer_class = Projects_ModelSerializer
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
"""
继承DRF的APIView之后,可实现认证,授权,限流等功能
继承DRF的APIView之后,每个实例方法中的request为Request对象
Request类对象拓展了很多Django中的HttpRequest的功能
Request类兼容HttpRequest类的功能
查询字符串参数:request.get或者request.query_params(推荐)
获取json参数:request.body或者request.data
获取www-from:request.POST或者request.data
获取multipart/form-data:request.body或者request.data
"""
"""
一:过滤
a. 在全局制定过滤引擎,setting(全局); search_fields:指定模型类过滤的字段,可加前缀(=,^,$), 【search_fields】
b. 特定的视图类制定:【filter_backends】
c. filter_queryset: 对查询集进行过滤
二:排序
a. 在setting(全局)指定排序引擎, search_fields:指定模型类过滤的字段,
b. 特定的视图类制定:【OrderingFilter】
三:分页
a. get_paginated_response:需要传序列化后的字典或嵌套字典的列表
返回response对象,返回数据中添加next,count,previous,results(数据)
b. pagination_class: 指定分页引擎
"""
# class ProjectView(mixins.ListModelMixin, mixins.CreateModelMixin, GenericAPIView):
# class ProjectView(generics.ListAPIView, generics.CreateAPIView, GenericAPIView):
class ProjectView(generics.ListCreateAPIView):
queryset = Projects.objects.all()
serializer_class = Projects_ModelSerializer
search_fields = ['name', 'leader']
ordering_fields = ['name', 'id', 'leader']
filter_backends = [filters.SearchFilter, filters.OrderingFilter]
# 指定分页引擎
# pagination_class = pagination
# def get(self, request, *args, **kwargs):
# return self.list(request, *args, **kwargs)
#
# def post(self, request, *args, **kwargs):
# return self.create(request, *args, **kwargs)