add. 添加友情链接增删改查接口

This commit is contained in:
2026-04-07 21:45:58 +08:00
parent 8dc2ce7780
commit d25b099658
2 changed files with 108 additions and 2 deletions
+34
View File
@@ -35,3 +35,37 @@ class FriendLinkCreateSchema(Schema):
url: str
order: int = 0
is_active: bool = True
# ================= 响应模式 (Output) =================
class PictureLinkSchema(Schema):
id: int
name: str
picture: str # 这里返回的是图片路径字符串
url: str
order: int
is_active: bool
created_at: datetime
updated_at: datetime
class Config:
# 如果你的 Model 字段和 Schema 字段名一致,通常不需要 orm_mode
# 但为了保险,或者如果你直接返回 Model 实例,建议开启
from_attributes = True
# ================= 请求模式 (Input) =================
class PictureLinkCreateSchema(Schema):
name: str
picture: str
url: str
order: int = 0
is_active: bool = True
class PictureLinkUpdateSchema(Schema):
name: Optional[str] = None
picture: Optional[str] = None
url: Optional[str] = None
order: Optional[int] = None
is_active: Optional[bool] = None
+74 -2
View File
@@ -5,12 +5,14 @@ from typing import Optional, List
from django.conf import settings
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
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
from base.models import FriendLink, LinkCategory, PictureLink
from base.schema import FriendLinkCreateSchema, FriendLinkSchema, LinkCategoryCreateSchema, LinkCategorySchema, \
PictureLinkSchema, PictureLinkCreateSchema, PictureLinkUpdateSchema
# Create your views here.
router = Router(tags=['base'])
@@ -106,3 +108,73 @@ def update_link(request, id: int, data: FriendLinkCreateSchema):
def delete_link(request, id: int):
FriendLink.objects.get(id=id).delete()
return {"success": True}
# ================= 列表与创建 =================
@router.get("/picture-link/", response=List[PictureLinkSchema])
def get_picture_links(request):
"""
获取所有图片链接
GET /api/picture-link/
"""
# 这里的排序与 models.py 中的 Meta.ordering 保持一致
return PictureLink.objects.all().order_by('order', '-created_at')
@router.post("/picture-link/", response=PictureLinkSchema)
def create_picture_link(request, payload: PictureLinkCreateSchema):
"""
新增图片链接
POST /api/picture-link/
"""
# 直接利用 payload 创建对象
# 注意:这里调用 save() 会触发你 models.py 中定义的 "最多4个启用" 的逻辑
link = PictureLink.objects.create(
name=payload.name,
picture=payload.picture,
url=payload.url,
order=payload.order,
is_active=payload.is_active
)
return link
# ================= 单个对象操作 =================
@router.get("/picture-link/{link_id}", response=PictureLinkSchema)
def get_picture_link(request, link_id: int):
"""
获取单个图片链接详情
GET /api/picture-link/{id}/
"""
return get_object_or_404(PictureLink, id=link_id)
@router.put("/picture-link/{link_id}", response=PictureLinkSchema)
def update_picture_link(request, link_id: int, payload: PictureLinkUpdateSchema):
"""
更新图片链接
PUT /api/picture-link/{id}/
"""
link = get_object_or_404(PictureLink, id=link_id)
# 更新字段
if payload.name is not None: link.name = payload.name
if payload.picture is not None: link.picture = payload.picture
if payload.url is not None: link.url = payload.url
if payload.order is not None: link.order = payload.order
if payload.is_active is not None: link.is_active = payload.is_active
# 保存,同样会触发 models.py 中的限制逻辑
link.save()
return link
@router.delete("/picture-link/{link_id}")
def delete_picture_link(request, link_id: int):
"""
删除图片链接
DELETE /api/picture-link/{id}/
"""
link = get_object_or_404(PictureLink, id=link_id)
link.delete()
return {"success": True}