add. 添加友情链接增删改查接口
This commit is contained in:
@@ -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
@@ -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}
|
||||
|
||||
Reference in New Issue
Block a user