Files
VDES_Backend/code/system/apis/post.py

96 lines
2.3 KiB
Python
Raw Normal View History

2026-07-13 15:37:05 +08:00
# -*- coding: utf-8 -*-
# @Time : 2022/5/10 21:56
# @Author : 臧成龙
# @FileName: post.py
# @Software: PyCharm
from typing import List
from django.shortcuts import get_object_or_404
from ninja import Field, ModelSchema, Query, Router, Schema, UploadedFile
from ninja.pagination import paginate
from system.models import Post
from utils.fu_crud import (
ImportSchema,
create,
delete,
export_data,
import_data,
retrieve,
update,
)
from utils.fu_ninja import FuFilters, MyPagination
router = Router()
class Filters(FuFilters):
name: str = Field(None, alias="name")
code: str = Field(None, alias="code")
status: int = Field(None, alias="status")
id: str = Field(None, alias="post_id")
class PostSchemaIn(ModelSchema):
class Config:
model = Post
model_fields = ['name', 'code', 'sort', 'status']
class PostSchemaOut(ModelSchema):
creator: str = Field(None, alias="creator.username")
class Config:
model = Post
model_fields = "__all__"
@router.post("/post", response=PostSchemaOut)
def create_post(request, data: PostSchemaIn):
post = create(request, data, Post)
return post
@router.delete("/post/{post_id}")
def delete_post(request, post_id: int):
delete(post_id, Post)
return {"success": True}
@router.put("/post/{post_id}", response=PostSchemaOut)
def update_post(request, post_id: int, data: PostSchemaIn):
post = update(request, post_id, data, Post)
return post
@router.get("/post", response=List[PostSchemaOut])
@paginate(MyPagination)
def list_post(request, filters: Filters = Query(...)):
qs = retrieve(request, Post, filters)
return qs
@router.get("/post/{post_id}", response=PostSchemaOut)
def get_post(request, post_id: int):
post = get_object_or_404(Post, id=post_id)
return post
@router.get("/post/all/list", response=List[PostSchemaOut])
def all_list_post(request):
qs = retrieve(request, Post)
return qs
@router.get("/post/all/export")
def export_post(request):
export_fields = ['name', 'code', 'status', 'sort', 'creator']
return export_data(request, Post, PostSchemaOut, export_fields)
@router.post("/post/all/import")
def import_post(request, data: ImportSchema):
import_fields = ['name', 'code', 'status', 'sort']
return import_data(request, Post, PostSchemaIn, data, import_fields)