From 402f7e512e74f7da4bccf679093cd7cb3a43b760 Mon Sep 17 00:00:00 2001 From: ngfchl Date: Tue, 7 Apr 2026 11:55:23 +0800 Subject: [PATCH] =?UTF-8?q?update.=20=E5=AE=8C=E6=88=90=E5=8F=8B=E9=93=BE?= =?UTF-8?q?=E4=BB=A5=E5=8F=8A=E5=88=86=E7=B1=BB=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base/schema.py | 37 ++++++++++++++++++++++++ base/views.py | 77 +++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 107 insertions(+), 7 deletions(-) create mode 100644 base/schema.py diff --git a/base/schema.py b/base/schema.py new file mode 100644 index 0000000..4c752d9 --- /dev/null +++ b/base/schema.py @@ -0,0 +1,37 @@ +from ninja import Schema +from datetime import datetime +from typing import Optional, List + + +class LinkCategorySchema(Schema): + id: int + name: str + code: str + order: int + is_active: bool + created_at: Optional[datetime] = None + + +class FriendLinkSchema(Schema): + id: int + category_id: int + name: str + url: str + order: int + is_active: bool + created_at: Optional[datetime] = None + + +class LinkCategoryCreateSchema(Schema): + name: str + code: str + order: int = 0 + is_active: bool = True + + +class FriendLinkCreateSchema(Schema): + category_id: int + name: str + url: str + order: int = 0 + is_active: bool = True diff --git a/base/views.py b/base/views.py index aff25ac..9cbf1de 100644 --- a/base/views.py +++ b/base/views.py @@ -1,15 +1,19 @@ -from django.shortcuts import render -from ninja import Router -from django.http import JsonResponse -from django.views.decorators.http import require_http_methods -from django.views.decorators.csrf import csrf_exempt -from django.conf import settings import os import uuid from datetime import datetime +from typing import Optional, List + +from django.conf import settings +from django.http import JsonResponse +from django.views.decorators.csrf import csrf_exempt +from django.views.decorators.http import require_http_methods +from ninja import Router + +from base.models import FriendLink, LinkCategory +from base.schema import FriendLinkCreateSchema, FriendLinkSchema, LinkCategoryCreateSchema, LinkCategorySchema # Create your views here. -router = Router(tags=['content']) +router = Router(tags=['base']) @csrf_exempt @@ -43,3 +47,62 @@ def custom_upload_file(request): "url": file_url, "default": file_url }) + + +# ========================= +# 分类 CRUD +# ========================= +@router.get("/link-categories", response=List[LinkCategorySchema]) +def list_categories(request): + return LinkCategory.objects.all() + + +@router.post("/link-categories", response=LinkCategorySchema) +def create_category(request, data: LinkCategoryCreateSchema): + return LinkCategory.objects.create(**data.dict()) + + +@router.put("/link-categories/{id}", response=LinkCategorySchema) +def update_category(request, id: int, data: LinkCategoryCreateSchema): + obj = LinkCategory.objects.get(id=id) + for k, v in data.dict().items(): + setattr(obj, k, v) + obj.save() + return obj + + +@router.delete("/link-categories/{id}") +def delete_category(request, id: int): + LinkCategory.objects.get(id=id).delete() + return {"success": True} + + +# ========================= +# 友情链接 CRUD +# ========================= +@router.get("/friend-links", response=List[FriendLinkSchema]) +def list_links(request, category_id: Optional[int] = None): + query = FriendLink.objects.all() + if category_id: + query = query.filter(category_id=category_id) + return query + + +@router.post("/friend-links", response=FriendLinkSchema) +def create_link(request, data: FriendLinkCreateSchema): + return FriendLink.objects.create(**data.dict()) + + +@router.put("/friend-links/{id}", response=FriendLinkSchema) +def update_link(request, id: int, data: FriendLinkCreateSchema): + obj = FriendLink.objects.get(id=id) + for k, v in data.dict().items(): + setattr(obj, k, v) + obj.save() + return obj + + +@router.delete("/friend-links/{id}") +def delete_link(request, id: int): + FriendLink.objects.get(id=id).delete() + return {"success": True}