Files
server/article/views.py
T
2026-04-08 15:27:21 +08:00

51 lines
1.6 KiB
Python

from typing import List
from django.shortcuts import get_object_or_404
from ninja import Router
from ninja.pagination import paginate, PageNumberPagination
from article.models import Article
from article.schema import ArticleUpdate, ArticleCreate, ArticleListOut, ArticleDetailOut
# Create your views here.
# Create your views here.
router = Router(tags=['Article'])
@router.get("/article/", response=List[ArticleListOut], description="获取文章列表")
@paginate(PageNumberPagination, page_size=20)
def list_articles(request, title: str = '', section_id: int = 0):
qs = (Article.objects.filter(title__contains=title).prefetch_related('attachments')
.select_related('author', 'section').order_by("-id"))
if section_id > 0:
return qs.filter(section_id=section_id)
return qs
@router.get("/article/{id}", response=ArticleDetailOut)
def get_article(request, id: int):
return get_object_or_404(Article.objects.prefetch_related("attachments"), id=id)
@router.post("/article/", response=ArticleDetailOut)
def create_article(request, data: ArticleCreate):
article = Article.objects.create(**data.dict())
return article
@router.put("/article/{id}", response=ArticleDetailOut)
def update_article(request, id: int, data: ArticleUpdate):
article = get_object_or_404(Article, id=id)
for attr, value in data.dict().items():
setattr(article, attr, value)
article.save()
return article
@router.delete("/article/{id}")
def delete_article(request, id: int):
article = get_object_or_404(Article, id=id)
article.delete()
return {"success": True}