添加教程的API

This commit is contained in:
2025-06-14 16:48:26 +08:00
parent 92adfd5415
commit 258e1474ee
11 changed files with 86 additions and 11 deletions

1
tutorial/__init__.py Normal file
View File

@@ -0,0 +1 @@

17
tutorial/models.py Normal file
View File

@@ -0,0 +1,17 @@
from django.db import models
from account.models import User
class Tutorial(models.Model):
title = models.CharField(max_length=128)
content = models.TextField()
created_by = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
is_public = models.BooleanField(default=False)
order = models.IntegerField(default=0)
class Meta:
ordering = ['order', '-created_at']
def __str__(self):
return self.title

12
tutorial/serializers.py Normal file
View File

@@ -0,0 +1,12 @@
from rest_framework import serializers
from .models import Tutorial
from account.serializers import UserSerializer
class TutorialSerializer(serializers.ModelSerializer):
created_by = UserSerializer(read_only=True)
class Meta:
model = Tutorial
fields = ['id', 'title', 'content', 'created_by', 'created_at',
'updated_at', 'is_public', 'order']
read_only_fields = ['created_by', 'created_at', 'updated_at']

View File

@@ -0,0 +1 @@

10
tutorial/urls/admin.py Normal file
View File

@@ -0,0 +1,10 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from ..views.admin import AdminTutorialViewSet
router = DefaultRouter()
router.register(r'tutorials', AdminTutorialViewSet)
urlpatterns = [
path('', include(router.urls)),
]

10
tutorial/urls/tutorial.py Normal file
View File

@@ -0,0 +1,10 @@
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from ..views.tutorial import TutorialViewSet
router = DefaultRouter()
router.register(r'tutorials', TutorialViewSet)
urlpatterns = [
path('', include(router.urls)),
]

17
tutorial/views/admin.py Normal file
View File

@@ -0,0 +1,17 @@
from rest_framework import viewsets, permissions
from account.decorators import super_admin_required
from ..models import Tutorial
from ..serializers import TutorialSerializer
class AdminTutorialViewSet(viewsets.ModelViewSet):
queryset = Tutorial.objects.all()
serializer_class = TutorialSerializer
permission_classes = [permissions.IsAuthenticated]
def get_permissions(self):
if self.action in ['create', 'update', 'partial_update', 'destroy']:
return [super_admin_required()]
return [permissions.AllowAny()]
def perform_create(self, serializer):
serializer.save(created_by=self.request.user)

View File

@@ -0,0 +1,8 @@
from rest_framework import viewsets, permissions
from ..models import Tutorial
from ..serializers import TutorialSerializer
class TutorialViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Tutorial.objects.filter(is_public=True)
serializer_class = TutorialSerializer
permission_classes = [permissions.AllowAny]