feat: 多用户系统改造(数据模型 + 认证 API)

This commit is contained in:
maoshen
2026-04-15 02:59:36 +00:00
parent 75423d4e0e
commit e6aecd2752
13 changed files with 283 additions and 13 deletions

View File

@@ -1,6 +1,7 @@
from rest_framework import viewsets
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework import permissions
from django.utils import timezone
from .models import DiaryEntry, DailyProgress, Experience, Task, Comment
from .serializers import (
@@ -9,21 +10,24 @@ from .serializers import (
)
class DiaryEntryViewSet(viewsets.ModelViewSet):
queryset = DiaryEntry.objects.all()
serializer_class = DiaryEntrySerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
return DiaryEntry.objects.filter(user=self.request.user)
@action(detail=False, methods=['get'])
def today(self, request):
"""获取今天的日记"""
today = timezone.now().date()
entry, created = DiaryEntry.objects.get_or_create(date=today)
entry, created = DiaryEntry.objects.get_or_create(user=request.user, 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]
entries = DiaryEntry.objects.filter(user=request.user).order_by('-date')[:7]
serializer = self.get_serializer(entries, many=True)
return Response(serializer.data)
@@ -73,8 +77,11 @@ class DailyProgressViewSet(viewsets.ModelViewSet):
class ExperienceViewSet(viewsets.ModelViewSet):
queryset = Experience.objects.all()
serializer_class = ExperienceSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
return Experience.objects.filter(user=self.request.user)
@action(detail=False, methods=['get'])
def by_category(self, request):
@@ -96,8 +103,11 @@ class ExperienceViewSet(viewsets.ModelViewSet):
class TaskViewSet(viewsets.ModelViewSet):
queryset = Task.objects.all()
serializer_class = TaskSerializer
permission_classes = [permissions.IsAuthenticated]
def get_queryset(self):
return Task.objects.filter(user=self.request.user)
@action(detail=False, methods=['get'])
def by_status(self, request):