From 6ac81045afc31b1a75f1d7033a1b9921e7cc4be9 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 4 Mar 2025 00:11:29 +0800 Subject: [PATCH] update --- tutorial/api.py | 35 ++++++++++++------- .../migrations/0002_alter_tutorial_display.py | 18 ++++++++++ tutorial/models.py | 2 +- tutorial/schemas.py | 5 ++- 4 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 tutorial/migrations/0002_alter_tutorial_display.py diff --git a/tutorial/api.py b/tutorial/api.py index 8bf0eb5..c162dcf 100644 --- a/tutorial/api.py +++ b/tutorial/api.py @@ -1,9 +1,7 @@ +from typing import List from ninja import Router from ninja.errors import HttpError - from account.decorators import super_required - -# from account.decorators import super_required from .schemas import TutorialAll, TutorialIn, TutorialReturn from .models import Tutorial @@ -14,28 +12,41 @@ router = Router() @super_required def tutorial(request): return { - "total": Tutorial.objects.count(), "list": Tutorial.objects.all(), "first": Tutorial.objects.first(), } +@router.get("/display", response=List[int]) +def get_all_public_display(request): + return Tutorial.objects.filter(is_public=True).values_list("display", flat=True) + + @router.get("/{display}", response=TutorialAll) -def get(request, display: str): - return Tutorial.objects.get(display=display) +def get(request, display: int): + try: + return Tutorial.objects.get(display=display) + except Tutorial.DoesNotExist: + raise HttpError(404, "此序号无教程") @router.post("/") @super_required -def create(request, payload: TutorialIn): - if Tutorial.objects.filter(display=payload.display): - raise HttpError(400, "有序号相同的教程存在") - Tutorial.objects.create(**payload.dict()) - return {"message": "创建成功"} +def create_or_update(request, payload: TutorialIn): + try: + item = Tutorial.objects.get(display=payload.display) + item.title = payload.title + item.content = payload.content + item.is_public = payload.is_public + item.save() + return {"message": "更新成功"} + except Tutorial.DoesNotExist: + Tutorial.objects.create(**payload.dict()) + return {"message": "创建成功"} @router.delete("/{display}") @super_required -def remove(request, display: str): +def remove(request, display: int): Tutorial.objects.filter(display=display).delete() return {"message": "删除成功"} diff --git a/tutorial/migrations/0002_alter_tutorial_display.py b/tutorial/migrations/0002_alter_tutorial_display.py new file mode 100644 index 0000000..f018b71 --- /dev/null +++ b/tutorial/migrations/0002_alter_tutorial_display.py @@ -0,0 +1,18 @@ +# Generated by Django 5.1.6 on 2025-03-03 14:40 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tutorial', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='tutorial', + name='display', + field=models.IntegerField(unique=True), + ), + ] diff --git a/tutorial/models.py b/tutorial/models.py index 4986058..8d19ca1 100644 --- a/tutorial/models.py +++ b/tutorial/models.py @@ -3,7 +3,7 @@ from django_extensions.db.models import TimeStampedModel class Tutorial(TimeStampedModel): - display = models.CharField(max_length=10, unique=True) + display = models.IntegerField(unique=True) title = models.CharField(max_length=100) content = models.TextField() is_public = models.BooleanField(default=False) diff --git a/tutorial/schemas.py b/tutorial/schemas.py index a0497a3..e2e454e 100644 --- a/tutorial/schemas.py +++ b/tutorial/schemas.py @@ -4,7 +4,7 @@ from .models import Tutorial class TutorialSlim(Schema): - display: str + display: int title: str is_public: bool @@ -16,13 +16,12 @@ class TutorialAll(ModelSchema): class TutorialReturn(Schema): - total: int list: List[TutorialSlim] first: Optional[TutorialAll] class TutorialIn(Schema): - display: str + display: int title: str content: str is_public: bool = False