添加提交

This commit is contained in:
2025-03-18 19:16:32 +08:00
parent f84f34cc46
commit 55ef262ae8
13 changed files with 304 additions and 44 deletions

View File

@@ -0,0 +1,18 @@
# Generated by Django 5.1.6 on 2025-03-18 06:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('task', '0003_alter_task_content_alter_task_display_and_more'),
]
operations = [
migrations.AlterField(
model_name='task',
name='task_type',
field=models.CharField(choices=[('challenge', '挑战'), ('tutorial', '教程')], editable=False, max_length=20, verbose_name='类型'),
),
]

View File

@@ -2,17 +2,20 @@ from django.db import models
from django_extensions.db.models import TimeStampedModel
class Task(TimeStampedModel):
TASK_TYPE_CHOICES = [
("challenge", "Challenge"),
("tutorial", "Tutorial"),
]
class TaskTypeChoices(models.TextChoices):
CHALLENGE = "challenge", "挑战"
TUTORIAL = "tutorial", "教程"
class Task(TimeStampedModel):
display = models.IntegerField(unique=True, db_index=True, verbose_name="序号")
title = models.CharField(max_length=100, verbose_name="标题")
content = models.TextField(verbose_name="内容")
task_type = models.CharField(
max_length=20, choices=TASK_TYPE_CHOICES, editable=False, verbose_name="类型"
max_length=20,
choices=TaskTypeChoices.choices,
editable=False,
verbose_name="类型",
)
is_public = models.BooleanField(default=False, verbose_name="是否公开")

View File

@@ -1,6 +1,7 @@
from typing import List
from ninja import Router
from ninja.errors import HttpError
from django.shortcuts import get_object_or_404
from account.decorators import super_required
from .schemas import TutorialAll, TutorialIn, TutorialSlim
from .models import Tutorial
@@ -11,20 +12,23 @@ router = Router()
@router.get("/list", response=List[TutorialSlim])
@super_required
def tutorial(request):
"""
后台显示所有的列表
"""
return Tutorial.objects.all()
@router.get("/display", response=List[int])
def get_all_public_display(request):
"""
前台显示所有公开的 display
"""
return Tutorial.objects.filter(is_public=True).values_list("display", flat=True)
@router.get("/{display}", response=TutorialAll)
async def get(request, display: int):
try:
return await Tutorial.objects.aget(display=display)
except Tutorial.DoesNotExist:
raise HttpError(404, "此序号无教程")
def get(request, display: int):
return get_object_or_404(Tutorial, display=display)
@router.post("/")
@@ -45,14 +49,11 @@ def create_or_update(request, payload: TutorialIn):
@router.put("/public/{display}")
@super_required
def toggle_public(request, display: int):
try:
item = Tutorial.objects.get(display=display)
item.is_public = not item.is_public
item.save()
label = "公开" if item.is_public else "隐藏"
return {"message": f"{item.display}{item.title}{label}"}
except Tutorial.DoesNotExist:
raise HttpError(404, "此序号无教程")
item = get_object_or_404(Tutorial, display=display)
item.is_public = not item.is_public
item.save()
label = "公开" if item.is_public else "隐藏"
return {"message": f"{item.display}{item.title}{label}"}
@router.delete("/{display}")