Django_restframework中的view的继承关系
GenericViewSet(viewset) -drf
GenericAPIView -drf
APIView -drf
View -django
Mixins
CreateModelMixin(object)
ListModelMinxin(object)
RetreveModelMixin(object)
UpdateModelMixin(object)
DestroyModelMixin(object)
drf过滤的实现(类似于django中的ORM)
class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
'''
商品列表页
'''
# queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = GoodsPageination
def get_queryset(self):
queryset = Goods.objects.all()
price_min = self.request.query_params.get("price_min",0)
if price_min:
queryset = queryset.filter(shop_price__gt=price_min)
return queryset
drf过滤进阶(范围查询,模糊查询)
import django_filters
from .models import Goods
class GoodsFilter(django_filters.rest_framework.FilterSet):
#查询价格的范围
pricemin = django_filters.NumberFilter(field_name="shop_price", lookup_expr='gte')
pricemax = django_filters.NumberFilter(field_name="shop_price", lookup_expr='lte')
#对商品名称进行模糊查询
name = django_filters.CharFilter(field_name="name",lookup_expr='icontains')
class Meta:
model = Goods
fields = ['pricemin','pricemax','name']
filters.SearchFilter(实现模糊查询最佳方法)
from rest_framework import filters
class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
'''
商品列表页
'''
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = GoodsPageination
filter_backends = (DjangoFilterBackend,filters.SearchFilter)
filter_class = GoodsFilter
#模糊查询
search_fields = ('name', 'goods_brief', 'goods_desc')
filters.OrderingFilter(实现升降序)
from rest_framework import filters
class GoodsListViewSet(mixins.ListModelMixin,viewsets.GenericViewSet):
'''
商品列表页
'''
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = GoodsPageination
filter_backends = (DjangoFilterBackend,filters.SearchFilter,filters.OrderingFilter)
filter_class = GoodsFilter
search_fields = ('name', 'goods_brief', 'goods_desc')
ordering_fields = ('sold_num','shop_price')