feat: 添加日记系统
- 完整的 Django 后端 (diary app) - 前端页面 - 部署脚本 (本地 + 云端) - Nginx 配置 - 数据迁移工具 - 同步工具
This commit is contained in:
62
diary-system/backend/diary/views.py
Executable file
62
diary-system/backend/diary/views.py
Executable file
@@ -0,0 +1,62 @@
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
from django.utils import timezone
|
||||
from .models import DiaryEntry, DailyProgress, Experience
|
||||
from .serializers import DiaryEntrySerializer, DailyProgressSerializer, ExperienceSerializer
|
||||
|
||||
class DiaryEntryViewSet(viewsets.ModelViewSet):
|
||||
queryset = DiaryEntry.objects.all()
|
||||
serializer_class = DiaryEntrySerializer
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def today(self, request):
|
||||
"""获取今天的日记"""
|
||||
today = timezone.now().date()
|
||||
entry, created = DiaryEntry.objects.get_or_create(date=today)
|
||||
serializer = self.get_serializer(entry)
|
||||
return Response(serializer.data)
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def recent(self, request):
|
||||
"""获取最近 7 天的日记"""
|
||||
entries = DiaryEntry.objects.order_by('-date')[:7]
|
||||
serializer = self.get_serializer(entries, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def stats(self, request):
|
||||
"""获取统计信息"""
|
||||
total_entries = DiaryEntry.objects.count()
|
||||
return Response({
|
||||
'total_entries': total_entries,
|
||||
'first_entry': DiaryEntry.objects.order_by('date').first().date if total_entries > 0 else None,
|
||||
'latest_entry': DiaryEntry.objects.order_by('-date').first().date if total_entries > 0 else None,
|
||||
})
|
||||
|
||||
class DailyProgressViewSet(viewsets.ModelViewSet):
|
||||
queryset = DailyProgress.objects.all()
|
||||
serializer_class = DailyProgressSerializer
|
||||
|
||||
|
||||
class ExperienceViewSet(viewsets.ModelViewSet):
|
||||
queryset = Experience.objects.all()
|
||||
serializer_class = ExperienceSerializer
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def by_category(self, request):
|
||||
"""按类别分组获取经验"""
|
||||
categories = {}
|
||||
for exp in Experience.objects.all():
|
||||
cat = exp.get_category_display()
|
||||
if cat not in categories:
|
||||
categories[cat] = []
|
||||
categories[cat].append(ExperienceSerializer(exp).data)
|
||||
return Response(categories)
|
||||
|
||||
@action(detail=False, methods=['get'])
|
||||
def recent(self, request):
|
||||
"""获取最近 10 条经验"""
|
||||
experiences = Experience.objects.order_by('-date', '-created_at')[:10]
|
||||
serializer = self.get_serializer(experiences, many=True)
|
||||
return Response(serializer.data)
|
||||
Reference in New Issue
Block a user