import json import random import warnings from calendar import timegm from datetime import datetime import requests from django.db.models import Q from django_filters.rest_framework import DjangoFilterBackend from openpyxl import Workbook, load_workbook from rest_framework import status from rest_framework.decorators import action from rest_framework.filters import OrderingFilter, SearchFilter from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.viewsets import ModelViewSet from rest_framework_jwt.authentication import JSONWebTokenAuthentication from rest_framework_jwt.serializers import (jwt_encode_handler, jwt_payload_handler) from rest_framework_jwt.settings import api_settings # Create your views here. from .models import Article from .serializers import ArticelSerializer, ArticelListSerializer from utils.custom import CommonPagination class ArticleViewSet(ModelViewSet): """ 文章:增删改查 """ perms_map = [ {'get': 'article_list'}, {'post': 'article_create'}, {'put': 'article_update'}, {'delete': 'article_delete'}] queryset = Article.objects.filter(is_delete=0).all() serializer_class = ArticelSerializer pagination_class = CommonPagination filter_backends = [DjangoFilterBackend,SearchFilter, OrderingFilter] search_fields = ('^title','^content') ordering_fields = ('title','update_time') ordering = ['-is_top', '-update_time'] def get_serializer_class(self): if self.action=='list': return ArticelListSerializer else: return ArticelSerializer @action(methods=['put'], detail=True, url_name='top_article', perms_map=[{'*':'top_article'}]) def top(self, request, *args, **kwargs): ''' 置顶文章 ''' instance = self.get_object() instance.is_top = False if instance.is_top else True instance.save() return Response(status=status.HTTP_200_OK)