Files
chunyu_project/app/views.py
T

70 lines
2.7 KiB
Python

from rest_framework import permissions
from rest_framework.pagination import PageNumberPagination
from rest_framework.response import Response
from drf_yasg.utils import swagger_auto_schema
from drf_yasg import openapi
from chunyu_project.common_schemas import success_response
from adrf.viewsets import ModelViewSet
from .models import Changelog
from .serializers import ChangelogSerializer
class ChangelogPagination(PageNumberPagination):
page_size = 10
page_size_query_param = 'page_size'
max_page_size = 100
def get_paginated_response(self, data):
return Response({
'code': 10000,
'message': 'Success',
'data': {
'count': self.page.paginator.count,
'next': self.get_next_link(),
'previous': self.get_previous_link(),
'results': data,
}
})
class ChangelogViewSet(ModelViewSet):
"""更新日志 ViewSet"""
queryset = Changelog.objects.filter(is_published=True)
serializer_class = ChangelogSerializer
permission_classes = [permissions.AllowAny]
pagination_class = ChangelogPagination
http_method_names = ['get']
def get_queryset(self):
queryset = Changelog.objects.filter(is_published=True)
update_type = self.request.query_params.get('update_type')
if update_type:
queryset = queryset.filter(update_type=update_type)
return queryset.order_by('-published_at')
@swagger_auto_schema(
tags=['更新日志'],
operation_summary='获取更新日志列表',
operation_description='获取已发布的更新日志列表,支持分页和按类型筛选',
manual_parameters=[
openapi.Parameter('update_type', openapi.IN_QUERY, description='更新类型筛选: new_feature/improvement/bug_fix/other', type=openapi.TYPE_STRING),
openapi.Parameter('page', openapi.IN_QUERY, description='页码', type=openapi.TYPE_INTEGER),
openapi.Parameter('page_size', openapi.IN_QUERY, description='每页数量', type=openapi.TYPE_INTEGER),
],
responses={200: success_response}
)
async def list(self, request, *args, **kwargs):
return await super().list(request, *args, **kwargs)
@swagger_auto_schema(
tags=['更新日志'],
operation_summary='获取更新日志详情',
operation_description='获取指定更新日志的详细信息',
manual_parameters=[
openapi.Parameter('pk', openapi.IN_PATH, description='更新日志ID', type=openapi.TYPE_INTEGER, required=True),
],
responses={200: success_response}
)
async def retrieve(self, request, *args, **kwargs):
return await super().retrieve(request, *args, **kwargs)