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}