from rest_framework import viewsets from article.serializers import ArticleSerializer, CategorySerializer, CategoryDetailSerializer from article.serializers import TagSerializer, ArticleDetailSerializer, AvatarSerializer from article.models import Article, Category, Tag, Avatar from article.permissions import IsAdminUserOrReadOnly from rest_framework.filters import SearchFilter class ArticleViewSet(viewsets.ModelViewSet): """文章视图集""" queryset = Article.objects.all() serializer_class = ArticleSerializer permission_classes = [IsAdminUserOrReadOnly] filter_backends = [SearchFilter, ] # http://127.0.0.1:8000/api/article/?author__username=admin&title=第一篇文章 # filter_fields = ['title', 'author__username',] # 精确查询 # 下面两种字段都可以使用模糊查询 search_fields = ('title', 'author__username') def perform_create(self, serializer): # 在创建文章前,提供了视图集无法自行推断的用户外键字段。 serializer.save(author=self.request.user) def get_serializer_class(self): if self.action == 'list': return ArticleSerializer else: return ArticleDetailSerializer class CategoryViewSet(viewsets.ModelViewSet): """分类视图集""" queryset = Category.objects.all() serializer_class = CategorySerializer permission_classes = [IsAdminUserOrReadOnly] pagination_class = None # 不进行翻页 def get_serializer_class(self): if self.action == 'list': return CategorySerializer else: return CategoryDetailSerializer class TagViewSet(viewsets.ModelViewSet): """标签视图集""" queryset = Tag.objects.all() serializer_class = TagSerializer permission_classes = [IsAdminUserOrReadOnly] pagination_class = None # 不进行翻页 class AvatarViewSet(viewsets.ModelViewSet): """标题图片视图集""" queryset = Avatar.objects.all() serializer_class = AvatarSerializer permission_classes = [IsAdminUserOrReadOnly]